【问题标题】:Selenium error when switching to a frame: NoSuchFrameException: Message: no such frame切换到帧时出现 Selenium 错误:NoSuchFrameException: Message: no such frame
【发布时间】:2019-04-04 06:55:02
【问题描述】:

我正在尝试切换到这个框架

但是,我一直收到此错误:

Traceback (most recent call last):
  File "/Users/yaoweiqi/PycharmProjects/learnselenium/test1.py", line 29, in <module>
    browser.switch_to.frame('layui-layer-iframe6')
  File "/Users/yaoweiqi/PycharmProjects/learnselenium/venv/lib/python3.6/site-packages/selenium/webdriver/remote/switch_to.py", line 89, in frame
    self._driver.execute(Command.SWITCH_TO_FRAME, {'id': frame_reference})
  File "/Users/yaoweiqi/PycharmProjects/learnselenium/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/yaoweiqi/PycharmProjects/learnselenium/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchFrameException: Message: no such frame
  (Session info: chrome=70.0.3538.77)
  (Driver info: chromedriver=2.43.600229 (3fae4d0cda5334b4f533bede5a4787f7b832d052),platform=Mac OS X 10.13.1 x86_64)

谁能告诉我我做错了什么?非常感谢。 以下是我的代码:

from selenium import webdriver
import time
from wait_element import wait_element

browser = webdriver.Chrome('/Users/yaoweiqi/Downloads/chromedriver')
browser.get('http://47.99.113.178/index.html')

wait_element(driver=browser, xpath='//input[@class="user-aqm-input"]', action='input', keys='***')
wait_element(driver=browser, xpath='//input[@class="user-user-input"]', action='input', keys='***')
wait_element(driver=browser, xpath='//input[@class="user-pwd-input"]', action='input', keys='***')
wait_element(driver=browser, xpath='//button[@class="user-submit determine"]', action='click')
try:
    wait_element(driver=browser, xpath='//img[@class="updataclose"]', action='click')
except:
    print('notice already closed')

wait_element(driver=browser, xpath='//*[@class="icon-jiahao"]', action='click')
wait_element(driver=browser, xpath='//*[@class="housing-type"]', action='click')

time.sleep(5)

frames = browser.find_element_by_tag_name('iframe')
browser.switch_to.frame('layui-layer-iframe6')

【问题讨论】:

  • 缺少l,数字应该是1,而不是3。
  • 您应该将代码和 html 作为文本发布,而不是作为图像发布。
  • 谢谢,但我已经更改了我的代码,但我仍然收到此错误。
  • @Jade,哪个错误?
  • 这个框架在另一个框架内吗?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

根据 HTML 切换到所需的框架,您需要使用 WebDriverwait 以使 框架可用并切换到它和您可以使用以下任一解决方案:

  • CSS_SELECTOR

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[id^='layui-layer-iframe'][src^='fangyuan']")))
    
  • XPATH:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id,'layui-layer-iframe') and starts-with(@src,'fangyuan')]")))
    

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

在这里你可以找到Ways to deal with #document under iframe的相关讨论

【讨论】:

    【解决方案2】:

    你做错了,ayui-layer-iframe6 一定是layui-layer-iframe6 试试这个,

    browser.switch_to.frame(browser.find_element_by_name("layui-layer-iframe6"))
    

    再次回到主窗口使用,

    browser.switch_to.default_content()
    

    因为回溯给了NoSuchFrameException,所以等待也可以WebDriverWait()

    【讨论】:

    • 谢谢,但我已经更改了我的代码,但我仍然收到此错误。
    • 仔细阅读我的回答,我告诉你写browser.find_element_by_name("layui-layer-iframe1") 而不仅仅是layui-layer-iframe1
    • 我试过你的代码。现在我收到这个错误:selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“method”:“name”,“selector”:“layui-layer-iframe6”}跨度>
    • switch_to.frame 接收 idname 作为参数。没有必要使用find_element_by_
    【解决方案3】:

    问题解决了。我使用了这段代码:

    browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="layui-layer-iframe6"]'))
    

    【讨论】:

    • 其实browser.switch_to.frame('layui-layer-iframe6')browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="layui-layer-iframe6"]'))的意思完全一样。我简直不敢相信这条线可以解决你的问题
    猜你喜欢
    • 2021-11-09
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多