【问题标题】:Getting active element in Selenium Python在 Selenium Python 中获取活动元素
【发布时间】:2016-05-22 17:24:52
【问题描述】:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
elem = driver.switch_to_active_element()
elem.send_keys('a')

我想将键发送到页面上当前活动的元素,但我不知道如何从驱动程序获取活动元素。我需要它,因为该元素上没有名称、id、类等。我找到了 Java 的代码,Python 的代码(上面写的),但是没有结果。

这是页面,对象 "" 没有属性。如何选择它?

<div action-name="menu-holder" class="uiMenuButtonSelectionHolder">
    <a href="javascript:;" class="choiceMenuClose" action-name="choice-menu-close"></a>
    <div style="top: 0px; left: 0px;" class="uiInlineBlock uiMenuHolder">
    <div>
       <input type="text">
    </div>

【问题讨论】:

标签: python python-2.7 selenium-webdriver


【解决方案1】:

我自己一直在为此苦苦挣扎,直到遇到this link.

switch_to_active_element() 已被弃用,我们应该使用switch_to.active_element

所以,应该是:

elem = driver.switch_to.active_element

【讨论】:

    【解决方案2】:

    您可以通过如下所示的 css 选择器来识别输入标签。查看this 以更好地了解选择器

    elem = driver.find_element_by_css_selector('div.uiInlineBlock input')
    elem.send_keys('a')
    

    选择器可以读作查找input tag, descendant to the div with class name _uiInlineBlock_

    希望您没有其他具有相同类的 div,在这种情况下,您必须使用 find_elements_by_css_selector 并从返回的元素列表中选择您想要 send_keys 的元素。

    编辑:

    如果元素不可见,您可以通过使其可见的流程,也可以执行 javascript 来查找并设置值

    driver.execute_script("document.querySelector('div.uiInlineBlock input').setAttribute('value', 'a');")
    

    【讨论】:

    • ElementNotVisibleException:消息:元素当前不可见,因此可能无法与之交互
    • 已添加如何处理答案中的隐藏元素
    • 谢谢!它有效,但我还有另一个问题。之后,我需要在该对象上发送回车键以发送值,但正如我所提到的,我无法在 python 中访问它。有没有办法通过JS发送回车,或者你知道如何在设置值后按回车。
    • @RastkoJović 这需要另一个答案来解释。看看这个问题 [链接] (stackoverflow.com/questions/3276794/…)
    • 如果您使用原生 JS 解决方案,最后一步将是 document.querySelector('div.uiInlineBlock input').dispatchEvent(ev); 并且如果您的页面已经加载了 jquery,那么在 jquery 解决方案中 $('div.uiInlineBlock input').trigger(e);
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    相关资源
    最近更新 更多