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