【发布时间】:2021-11-05 11:27:48
【问题描述】:
目前我正在尝试从我的默认内容切换到网站中唯一的 iframe。不知道是不是网站是这样编码的,但是我无法通过DOM访问任何元素。
站点的 XPATH 是 //*[@id="iframeBody"](当我将其粘贴到元素检查器中时,我得到了正确的 iframe)。所以,如果我尝试使用frame_to_be_available_and_switch_to_it 进行切换,输出如下:
try:
WebDriverWait(self.driver, 10).until(ec.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='iframeBody' and @name='body']")))
except Exception as e:
print(e)
>>> Message: javascript error: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.
>>>(Session info: chrome=79.0.3945.88)
我还尝试创建一个 iframe 元素变量,通过 ID 和 XPATH 找到它,然后我使用了 switch_to(element)。得到相同的结果。当我打印这个变量时,实际上找到了元素:
# Also tried finding with id
element = self.driver.find_element_by_xpath('//iframe[@id='iframeBody')
print(element)
<selenium.webdriver.remote.webelement.WebElement (session="9184691b1fdcccc15dd36bbcb914ac8b", element="1ef77729-8a6e-4d3c-98bd-c95878437585")>
但是当我尝试切换到这个 iframe 时,我得到了与上面相同的结果。 出于某种原因,这个网站不允许我使用 DOM 数据,实际上,当我尝试单击一个按钮时,我需要使用动作链,因为我得到了同样的错误。
有人可以帮帮我吗?
【问题讨论】:
-
在使用 webdriverwait 时似乎不应该出现 javascript 错误......这有点奇怪。包括更完整的代码版本。尝试/接听电话并从 webdriver 发布异常(如果有)...
-
我现在用 try and catch 更新了我的问题。
-
不确定那里的 python 语法......但看起来它需要一个 webelement。 (而不是按定位器)frameToBeAvailableAndSwitchToIt 具有重载的构造函数...selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/…