硒:查找存储在容器中的元素

时间:2018-12-11 02:41:33

标签: python selenium selenium-webdriver xpath webdriverwait

我正在使用Selenium来自动化流程。到目前为止,我在这里可以找到所需的东西非常成功,但是却找不到找到该元素的方法:

<a href="javascript:void(0);" onclick="AUL.update('AssignedAssetsUpdateContainer', {}, '13.7.25.0.0.0.0.2.3.0.0.1.2.0.3.0.1.5.3.3.0.1.3.1.5.0.0.1.2.9.5.1.19.0.1.3.1');">
123456
</a>

我首先尝试通过搜索所有标签来查找它,

assetElements = driver.find_elements_by_tag_name("a")
for element in assetElements:
     if(element.text == "123456")
          element.send_keys(Keys.RETURN)

我显然是因为href标记而选择了此路线,但它告诉我找不到页面上的元素。我认为这是因为页面正在查询数据库并将其填充到容器中。

Butttt...。由于无法找到它,我采取了在https://selenium-python.readthedocs.io/api.html#上找到的其他find_elements选项,并打印了可用的.text段,但找不到。

任何想法都将受到欢迎。这是我第一次在该网站上发帖,希望我不要错过任何内容。

这是我尝试查找的字段的图像,它是搜索响应:

搜索字段容器响应

Screen Shot

为了显示,这是CSS响应,查找其他条目,但未找到“ 123456”

CSS_Selector响应

Screen Shot

添加了屏幕截图,显示了搜索元素的结果

找到的元素@JeffC的屏幕截图

Screen shot

1 个答案:

答案 0 :(得分:0)

所需元素是启用了JavaScript的元素,因此要对该元素调用click(),必须诱使 WebDriverWait 使元素可点击,您可以使用以下解决方案:

  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@onclick,'AssignedAssetsUpdateContainer') and normalize-space()='123456']"))).click()
    
  • 注意:您必须添加以下导入:

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