【问题标题】:How to locate a dynamic element through Selenium and Python如何通过 Selenium 和 Python 定位动态元素
【发布时间】:2019-03-07 15:17:49
【问题描述】:

我正在win10和firefox中用python和selenium webdriver写一个爬虫。
我在理解页面时遇到了困难:

https://irs.thsrc.com.tw/IMINT/

页面有一个弹出消息框。 弹出消息框中a链接的xpath为:

//html/body/div[2]/form[1]/div[2]/div[1]/div[1]/div[1]/div[1]/span[1]/a[1]

selenium webdriver 为 firefox 返回的 html 源文件不包含该消息框的标记。 所以我发送r = requests.get('https://irs.thsrc.com.tw/IMIT/')再次获取html源文档,然后我在html中获取标签。

在我得到带有弹出消息框标签的新html源文档后,我注意到这个消息框是style:"display:none"
我不确定这如何影响 webdriver 的返回值。

应该禁用所有可操作的标签。
但是 webdriver 告诉我,在我用 xpath 找到它们的标记元素后,它们都会显示并启用。
当我使用webdriver在弹出的消息框中找到上面xpath的链接时,webdriver说找不到该元素。 在这种情况下,我无法使用 webdriver 单击弹出消息框中的 a 链接。 有谁知道如何让 webdriver 返回标签元素的真实状态? 例如,我希望 webdriver 告诉我所有元素都被禁用,除了 a-link 和弹出消息框中的确认按钮。
任何答案和建议将不胜感激。

【问题讨论】:

  • cookie 的确认按钮?
  • 感谢您的快速cmets。但是我必须承认我在这方面是无知的。 cookie 如何影响元素的状态?我是否需要扫描 cookie 才能查看元素的真实状态。
  • 我在问弹出框是什么。当我查看该页面时,我会弹出一个要求我接受 cookie 的弹出窗口。您指的是弹出窗口吗?
  • 是的,就是这样。谢谢!

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

您所指的弹出消息框是您同意cookie分析和其他跟踪技术,您需要在带有文字的元素上click() 我同意element_to_be_clickable() 引入WebDriverWait,您可以使用以下任一解决方案:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button_main#btn-confirm"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='button_main' and @id='btn-confirm']"))).click()
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 谢谢!让我明天试试,然后回复你。
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多