【发布时间】:2018-04-03 22:39:34
【问题描述】:
当我尝试将 switch_to_frame() 或 switch_to.frame() (顺便说一句,其中哪一个是正确的?)到不友好的 iFrame 时,我遇到了错误。应该支持吗?
def click_all(driver):
for img in imgs:
img.click()
iframes = driver.find_elements_by_tag_name('iframe')
for ifr in iframes:
try:
driver.switch_to.frame(ifr)
except:
e = sys.exc_info()
print "Error: %s" % str(e) # Gives a vague error: '(<class 'selenium.common.exceptions.WebDriverException'>, WebDriverException(), <traceback object at 0x1102a9680>)'
return
click_all(driver)
感谢您的帮助!
堆栈跟踪是:
Traceback (most recent call last):
File "/Users/merrigan/working/DockLion/qe-cordell/test/bases/util.py",
line 45, in click_all
driver.switch_to_window(ifr)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 657, in switch_to_window
self._switch_to.window(window_name)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/switch_to.py", line 113, in window
self._driver.execute(Command.SWITCH_TO_WINDOW, data)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
self.error_handler.check_response(response)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in
check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: unknown error: 'name' must be a string
(Session info: chrome=65.0.3325.181)
(Driver info: chromedriver=2.33.506106
(8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.12.6 x86_64)
(这是否意味着它仅在 iFrame 具有 name 属性时才有效?)
【问题讨论】:
-
根据您运行的 selenium 版本,
switch_to_frame已被弃用。另外,请提供您遇到的异常的完整堆栈跟踪。您可以通过删除try/except并让控制台打印异常,或使用traceback并将print traceback.format_exc()放入您的except块中来获得它的输出 -
好吧,根据堆栈跟踪...它似乎与您提供的代码示例不匹配。例如,stacktrace 的第 4 行是:
driver.switch_to_window(ifr)。此外,您的代码的最后一行似乎导致了无限循环,但我猜这只是您的示例的格式错误。
标签: python selenium selenium-webdriver iframe