如何在没有索引器的情况下单击opensecrets页面的第一个链接?

rta7y2nd  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(251)

我试图点击opensecrets.org查询结果页面中的第一个链接。我已经使用selenium搜索了“chase”,现在我想转到第一个可用链接的页面。最后,我希望遍历整个搜索列表并单击第一个链接,但现在我甚至无法让代码使用这个元素的特定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()

我得到一个错误:索引器:列表索引超出范围。有人知道我为什么会出现这个错误吗?或者有没有更通用的方法来实现这一点,这样我就可以通过任何搜索来实现这一点?我一直看到点击谷歌搜索的第一个链接的答案,但它们都使用标签名称“cite”,因此我不确定如何将其应用于opensecrets搜索

m2xkgtsf

m2xkgtsf1#

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

相关问题