python - Selenium 使用 Python 自动单击选项卡
问题描述
我正在使用 Selenium 和 Python 来抓取包含 JavaScript 的页面。页面顶部的赛马场结果选项卡,例如“Ludlow”、“Dundalk”,可以手动点击,但没有任何明显的超链接附加到它们。... from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(executable_path='C:/A38/chromedriver_win32/chromedriver.exe')
driver.implicitly_wait(30)
driver.maximize_window()
# Navigate to the application home page
driver.get("https://www.sportinglife.com/racing/results/2020-11-23")
...
到目前为止,这有效。我使用 BeautifulSoup 来查找 NewGenericTabs 的标签名称,例如“Ludlow”、“Dundalk”等。但是,以下代码尝试自动单击选项卡,每次都会超时。
WebDriverWait(driver, 60).until(EC.element_to_be_clickable((By.LINK_TEXT, "Ludlow"))).click()
欢迎任何帮助。
解决方案
WebElement不是标签,<a>
而是<span>
标签,因此By.LINK_TEXT
不起作用。
要单击所需的元素,您可以使用以下任一基于xpath的Locator Strategies:
勒德洛:
driver.get("https://www.sportinglife.com/racing/results/2020-11-23") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mode='primary']"))).click() driver.find_element_by_xpath("//span[@data-test-id='generic-tab' and text()='Ludlow']").click()
邓多克:
driver.get("https://www.sportinglife.com/racing/results/2020-11-23") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mode='primary']"))).click() driver.find_element_by_xpath("//span[@data-test-id='generic-tab' and text()='Dundalk']").click()
理想情况下,要单击需要诱导WebDriverWait的元素element_to_be_clickable()
,您可以使用以下基于xpath的Locator Strategies:
勒德洛:
driver.get("https://www.sportinglife.com/racing/results/2020-11-23") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mode='primary']"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@data-test-id='generic-tab' and text()='Ludlow']"))).click()
邓多克:
driver.get("https://www.sportinglife.com/racing/results/2020-11-23") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@mode='primary']"))).click() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@data-test-id='generic-tab' and text()='Dundalk']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
推荐阅读
- model-view-controller - 第一次使用 MVC
- flutter - 如何在颤振计算之前等待(?)传递数据
- python - 需要帮助从 json 文件格式化 pandas 数据框
- python - 使用多处理从列表中删除项目
- r - R Shiny 在后台加载隐藏的侧边栏(使用 bs4Dash 包)
- python - 从 Big Query python API 调用返回的列列表中删除列
- ios - MKPlacemark() 创建保留周期
- angularjs - 尝试构建时出现错误消息--Ionic App
- python - 如何使用 Google api 获取 youtube 频道订阅者历史数据的计数?
- python - 如何返回两个列表之间的不匹配