我正在用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和弹出消息框中的确认按钮。
任何答案和建议将不胜感激。
答案 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