【问题标题】:Python 2.7 Selenium, Click on button while the page isn't fully loadPython 2.7 Selenium,页面未完全加载时单击按钮
【发布时间】:2017-03-05 11:58:45
【问题描述】:

您能否在页面未完全加载但该元素已加载/可见时单击一个元素?如果是,那怎么办?如果没有,还有其他解决方案吗?

【问题讨论】:

    标签: python python-2.7 selenium click element


    【解决方案1】:

    从技术上讲,您可以针对“presence_of_element_located”或“visibility_of_element_located”条件设置显式等待。但是请记住,单击元素触发的操作可以通过多种方式绑定,其中一些可能发生在 dom 准备好之后(当加载完整的 DOM 时,尽管尚未完全渲染)。

    想想这些场景:

    1. 元素有一个触发 javascript 函数的“onClick”属性:在这种情况下,该操作可以在完全加载之前发生(但前提是它不涉及尚未呈现的元素)
    2. 该元素是一个带有“href”属性的锚点,其中包含一个普通的 url:在这种情况下,我认为在完全加载之前单击它可能非常安全
    3. 该元素在某些时候通过 javascript 绑定了一个动作:在这种情况下,您应该检查 js 代码以确保该元素在您想要单击它时已经绑定了该动作。

    【讨论】:

    • 你能写一段示例代码吗?您将如何编写显式等待?假设我想点击 driver.find_element_by_id('a') ,而不是等待页面完全加载。假设元素是一个带有“href”属性的锚。
    • 也许我有点草率:我忘了说 selenium 对于每个“获取”的 url 都会等到 DOM 准备好后,才能将控制权返回给您的脚本。考虑到这一点,如果在初始 DOM 之后(即通过 ajax 调用或任何其他客户端 DOM 操作)未加载您正在处理的网站中的锚点,我认为不可能实现您想要的。对不起。
    • 嗯,实际网站加载速度非常快,大约 6000 毫秒即可使用,但驱动程序会等到来自 springserve.com 的广告加载,加载速度非常慢。
    • 这改变了很多情况:如果您的问题与加载不需要的内容(如 ADS)有关,我建议切换到 Firefox 或 Chrome(如果您还没有这样做)并安装广告-block 扩展以防止它们加载。如果您的脚本针对特定网站,您可以优化扩展程序的算法以阻止该网站中的每个广告。
    猜你喜欢
    • 2017-03-22
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多