如何通过Selenium和Python找到动态元素

时间:2019-03-07 15:17:50

标签: python selenium xpath css-selectors webdriverwait

我正在用win10和firefox中的python和Selenium Webdriver编写爬虫。
我在理解该页面时遇到了困难:

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

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

1 个答案:

答案 0 :(得分:0)

您要引用的弹出消息框是要理解 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