首页 > 解决方案 > 如何在不出现 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 搜索

标签: pythonselenium

解决方案


只需单击第一个链接,您可以使用以下 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

推荐阅读