0

我正在尝试切换到 selenium (Python) 中的 iframe。但是,无论我尝试什么,我都会不断收到错误消息。

iframes = driver.find_elements_by_tag_name('iframe')
print(len(iframes))
    for iframe in iframes:
        if 'ontouchmove' in iframe:
            print(iframe)
            driver.switch_to.frame(iframe)

这会产生错误 -

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: missing 'ELEMENT'

我也试过这个 -

iframes = driver.find_elements_by_tag_name('iframe')
print(len(iframes))
counter = 0
for iframe in iframes:
    if 'ontouchmove' in iframe:
        print(iframe)
        driver.switch_to.frame(counter)
    counter += 1

这会产生错误 -

selenium.common.exceptions.JavascriptException: Message: javascript error: frame.setAttribute is not a function

我不太确定我还能在这里做什么,有点迷失......任何帮助将不胜感激。

编辑:

iframes = driver.find_elements_by_tag_name('iframe')
print(len(iframes))
driver.switch_to.frame(iframes[0])

这会产生错误:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: missing 'ELEMENT' 
4

2 回答 2

0

'ontouchmove'是一个字符串,其中iframe是一个WebElement。因此,您应该在WebElement属性内查找字符串,而不是WebElement

  • WebElement id中查找字符串ontouchmove

    iframes = driver.find_elements_by_tag_name('iframe')
    print(len(iframes))
        for iframe in iframes:
            if 'ontouchmove' in iframe.get_attribute("id"):
                print(iframe)
                driver.switch_to.frame(iframe)
    
  • WebElement中寻找字符串ontouchmove

    iframes = driver.find_elements_by_tag_name('iframe')
    print(len(iframes))
        for iframe in iframes:
            if 'ontouchmove' in iframe.get_attribute("class"):
                print(iframe)
                driver.switch_to.frame(iframe)
    
  • WebElement标题中寻找字符串ontouchmove

    iframes = driver.find_elements_by_tag_name('iframe')
    print(len(iframes))
        for iframe in iframes:
            if 'ontouchmove' in iframe.get_attribute("title"):
                print(iframe)
                driver.switch_to.frame(iframe)
    
于 2022-01-10T16:56:54.277 回答
0

这是if 'ontouchmove' in iframe行不通的,因为iframe这里是一个 web 元素,它不是一个字符串,而是一个 web 元素对象。因此,检查 Web 元素中的文本字符串是无效的操作。
driver.switch_to.frame(counter)将无法正常工作,因为它driver.switch_to.frame()旨在接受 Web 元素作为参数,而不是int原始数字。
我不确定适合您的正确代码,因为我看不到您正在处理的网页,我只能猜测以下内容:
您可以切换到这些 iframe,一旦您进入其中,您就可以验证存在包含所需文本的元素。像这样的东西:

iframes = driver.find_elements_by_tag_name('iframe')
print(len(iframes))
for iframe in iframes:
    driver.switch_to.frame(iframe)
    text_elements = driver.find_elements_by_xpath('//*[contains(text(),"ontouchmove")]')
    if text_elements: #list is non-empty, element found
            print("Element found!!!")
    else:
        driver.switch_to.default_content() #element not found, switching back to default content
于 2022-01-10T14:54:11.060 回答