【问题标题】:Get element at position with Selenium使用 Selenium 在位置获取元素
【发布时间】:2015-07-14 09:38:55
【问题描述】:

是否可以使用 Selenium 网络驱动程序运行或获得 document.elementFromPoint 提供的相同功能?

【问题讨论】:

    标签: python selenium selenium-webdriver


    【解决方案1】:

    您必须为此使用 JavaScript:

    element = driver.execute_script("""
    return document.elementFromPoint(arguments[0], arguments[1]);
    """, x, y)
    

    这假定xy 设置为整数值。在第一个参数之后传递给execute_script 的参数在JavaScript 端变为arguments[0], arguments[1] 等。 (这只是旧的arguments object。Selenium 将您提供给execute_script 的JavaScript 代码包装在一个函数中。)element 将是WebElementNone 的一个实例,如果找不到的话。根据MDN page on this function None 值将在以下情况下发生:

    如果指定的点在文档的可见范围之外或任一坐标为负,则结果为null

    JavaScript null 在 Python 中变为 None

    【讨论】:

    • 谢谢,这很有意义!如果有人知道如何在不进入页面上的 JS 的情况下做到这一点,那将是首选,但这也可以。
    • 只有在页面上没有框架或 iframe 的情况下,才可以使用 JavaScript。否则浏览器中的跨站点脚本保护会禁止访问 JavaScript 中的另一个框架。正确的解决方案是在驱动程序中实现这一点。
    • @Elmue 我刚刚在 Chrome 中尝试过,在一个以iframe 加载另一个站点的页面上。它有效。
    • 如果你想同时尊重框架和 iframe,那就更复杂了。我在 C# 中发布了一个工作代码,您可以在这里找到:stackoverflow.com/questions/31910534/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2020-01-24
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    相关资源
    最近更新 更多