如何通过Selenium和Python定位动态元素

问题描述 投票:0回答:1

我在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和确认按钮外,所有元素都被禁用。 任何答案和建议将不胜感激。

python selenium xpath css-selectors webdriverwait
1个回答
0
投票

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

  • 使用CSS_SELECTORWebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.button_main#btn-confirm"))).click()
  • 使用XPATHWebDriverWait(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
© www.soinside.com 2019 - 2024. All rights reserved.