python - 如何在不出现 indexError 的情况下单击 opensecrets 页面的第一个链接?
问题描述
我正在尝试单击opensecrets.org查询结果页面中的第一个链接。我已经使用 selenium 搜索了“追逐”,现在我想转到第一个可用链接的页面。最终,我想遍历整个搜索列表并单击第一个链接,但现在我什至无法让我的代码使用这个元素的特定 xpath 运行。当我运行此代码时:
result = driver.find_elements_by_xpath(
'//*[@id="___gcse_0"]/div/div/div/div[5]/div[2]/div/div/div[1]/div[1]/div[1]/div[1]/div/a')[0]
result.click()
我收到一个错误:IndexError:列表索引超出范围。有谁知道我为什么会收到此错误,或者是否有更通用的方法可以做到这一点,以便我可以通过任何搜索来做到这一点?我一直看到点击 google 搜索的第一个链接的答案,但他们都使用 tag_name “cite”,所以我不确定如何将其应用于 opensecrets 搜索
解决方案
只需单击第一个链接,您可以使用以下 xpath :
(//a[contains(@class, 'gs-title')])[1]
在代码中,您可以像这样使用它:
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, "(//a[contains(@class, 'gs-title')])[1]"))).click()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC4
from selenium.webdriver.common.action_chains import ActionChains
如果您想从循环中执行此操作:
counter = 1
action = ActionChains(driver)
for link in driver.find_elements(By.XPATH, f"(//a[contains(@class, 'gs-title')])[{counter}]"):
action.move_to_element(link).click().perform()
if counter == 1:
break
counter = counter + 2
推荐阅读
- symfony - Symfony 3 缓存建立与 ezplatform
- c - union integer 成员返回 union 中的数据,而 float 则显示异常
- pandas - 查找熊猫中每个组中的值
- r - 在 R 中使用 voronoi 细分匹配点到节点
- tensorflow - TensorFlow 对象检测 API 微调检查点
- gatsby - gatsbyjs 构建输出文件的目的是什么
- c++ - 带有图像的 Qlabel 上的 MouseEvent 坐标
- excel - Excel 2016 图表数据标签始终为空
- c# - 如何在 EF Core 中使用 select 方法获取所有以前的数据
- laravel - 如何为 Laravel 最大作业尝试指定默认值和全局值