错误切换到iframe selenium python

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误切换到iframe selenium python相关的知识,希望对你有一定的参考价值。

目前我正在尝试切换到iframe / fancybox,但我收到以下错误:

line 237, in check_response raise exception_class
(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: 
Message: unknown error: missing 'ELEMENT'

这就是我找到iframe的方式:

_iframe_ = {"by": By.XPATH, "value": "//iframe[@class='fancybox-iframe' and starts-with(@id,'fancybox-frame') and contains(@src,'/reminder/add/relation/')]"}


 def __init__(self, driver):
        super(BasePage, self).__init__()
        self.driver = drive
        self.driver.switch_to.frame(self._iframe_)

iframe名称是:

fancybox-frame1518441842751" 

HTML:

  <iframe id="fancybox-frame1518443041369" name="fancybox-frame1518443041369" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="" scrolling="auto" src="/reminder/add/relation/58048" kwframeid="1"></iframe>
答案

要正确识别<iframe>,您必须按如下方式更改Locator Strategy

_iframe_ = {"by": By.XPATH, "value": "//iframe[@class='fancybox-iframe' and starts-with(@id,'fancybox-frame') and contains(@src,'/reminder/add/relation/')]"}

 def __init__(self, driver):
    super(BasePage, self).__init__()
    self.driver = driver
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((self._iframe_)))
另一答案

idname属性看起来是动态的(代码和html中的数字不匹配)。您可以尝试通过部分id / name找到

_iframe_ = {"by": By.CSS_SELECTOR, "value": "[id*='fancybox-frame']"}
# "[name*='fancybox-frame']"

作为旁注,frame()可以接收id / name作为参数

self.driver.switch_to.frame('fancybox-frame1518441842751')

本来有用(当然除了动态问题)。

以上是关于错误切换到iframe selenium python的主要内容,如果未能解决你的问题,请参考以下文章

通过 Selenium 和 python 切换到 iframe

selenium切换到iframe

Selenium 多表单(frame/iframe)切换

Selenium中web三大切换之iframe窗口及Alert(弹窗)切换

Python Selenium:如何等待并切换到动态 iframe?

selenium学习 -9iframe的切换