【问题标题】:How to close iframe selenium python如何关闭 iframe selenium python
【发布时间】:2020-08-02 15:01:51
【问题描述】:

网站中的 1 个单击按钮显示 iframe,如弹出窗口,我可以对其进行编辑,但我无法关闭 iframe 我尝试使用 X 按钮,但是当鼠标焦点在按钮上时,它会更改类名并在鼠标上显示文本,它不会有身份证。

这是按钮的来源

<a class="jbox-close" title="Close" onmouseover="$(this).addClass('jbox-close-hover');" onmouseout="$(this).removeClass('jbox-close-hover');" style="position:absolute; display:block; cursor:pointer; top:11px; right:11px; width:15px; height:15px;"></a>

this is code focus mouse
<a class="jbox-close jbox-close-hover" title="Close" onmouseover="$(this).addClass('jbox-close-hover');" onmouseout="$(this).removeClass('jbox-close-hover');" style="position:absolute; display:block; cursor:pointer; top:11px; right:11px; width:15px; height:15px;"></a>

这是我的代码

        for link in tittle:
            a = link.get_attribute('title')
            if (a == "Packaging Details"):
                link.click()
                time.sleep(2)
                print(driver.current_url)
                iframe=driver.find_element_by_tag_name('iframe')
                driver.switch_to.frame(iframe)
                time.sleep(2)
                print(driver.find_element_by_id("width").get_attribute('value'))
                print(type(driver.find_element_by_id("width").get_attribute('value')))
                print(widthctn)
                driver.find_element_by_id("width").send_keys("",widthctn)
                time.sleep(1)
                driver.find_element_by_name("btnSave").click()
                time.sleep(1)
                driver.switch_to.window(driver.window_handles[1])
``
and this error

raceback(最近一次通话最后一次): 文件“C:/Users/dtung/PycharmProjects/BS4/multiple tab.py”,第 79 行,在 链接.click() 文件“C:\Users\dtung\miniconda3\envs\BS4\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 80 行,点击 self._execute(Command.CLICK_ELEMENT) _execute 中的文件“C:\Users\dtung\miniconda3\envs\BS4\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 633 行 return self._parent.execute(命令,参数) 执行中的文件“C:\Users\dtung\miniconda3\envs\BS4\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 321 行 self.error_handler.check_response(响应) 文件“C:\Users\dtung\miniconda3\envs\BS4\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.ElementClickInterceptedException:消息:元素单击被拦截:元素 ... 在点 (257、505) 处不可单击。其他元素会收到点击: (会话信息:chrome=81.0.4044.113)


【问题讨论】:

    标签: python-3.x selenium iframe popup


    【解决方案1】:

    如果您询问 iframe,可以在这里找到答案Selenium and iframe in html

    但是您的错误看起来像是某些元素/警报正在隐藏您要单击的实际元素。如果元素不可见或被其他元素隐藏,您可以使用 js 执行器实现单击。 eg:假设点击失败,

    btnSave = driver.find_element_by_name("btnSave")
    driver.execute_script('arguments[0].click();', btnSave)
    

    【讨论】:

    • 感谢您的回答,它打开了 2 帧,您的回答帮助我解决了问题,但我想了解更多关于如何关闭它以便能够优化的信息。注意:隐藏元素是 link.click() 它打开 iframe
    • 您的代码看起来像是在引用 Windows,在这种情况下,您可以使用 driver.close() 将其关闭,如果您想退出 iframe,请使用此 driver.switch_to.default_content()
    • driver.close() 它关闭页面。 driver.switch_to.default_content() 它仍然无法关闭 iframe 只是切换出 iframe 并且许多 iframe 重叠。
    • 如果你能提供页面源或url,你是如何尝试关闭iframe的。一般来说,我们无法关闭 iframe。但是我们可以使用 js 从页面中删除它。
    • 对不起,我不能。我在哪里可以找到它,js。我只是初学者,希望能学到更多。 P/S:当我编码 driver.find_element_by_id("width").get_attribute('value') 如果属性不存在我的代码有问题吗?再次感谢你
    【解决方案2】:

    在 iframe 上完成处理元素后,您不能关闭 iframe,而是可以使用 driver.switch_to.default_content() 将控制权切换回父窗口

    find more on how to handle iframes

    【讨论】:

    • 感谢您的回答,但我需要关闭当前框架以打开另一个框架进行编辑。
    • 在这种情况下,您可以直接使用 driver.switch_to.default_content() 切换回父窗口,然后使用 driver.switch_to.frame(element) 处理您的下一个 iframe
    • 我刚刚更新了上面的代码,错误可能无法点击。
    • 提供你的网址
    • 对不起,我无法提供网址,但也许这个网址的工作方式相同webcache.googleusercontent.com/search?q=cache:https://…
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2018-03-09
    相关资源
    最近更新 更多