如何在python的selenium中浏览网页时单击链接?

2024-09-27 22:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为python使用selenium。当我使用xpath单击链接时。我收到一个错误TimeoutException:消息:。我尝试使用by.ID和by.tag,但此链接似乎已隐藏。如何单击这两个链接

这里是我的第一个链接代码:

btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[3]/div/div/div[2]/div/div/div/div[2]/div/div/div[1]/div/div/div[2]/div/div/div")))
btn.click()


<div class="lib_33_IXqu lib_10OTPLG lib_rljvxxj lib_2bmVxh4 lib_AWe8PWK lib_NH5Lx3B lib_AWe8PWK"><div class="">Most Active<div class="lib_gdMpTuS lib_3Wb397t lib_QVji0M8 lib_1dwKEN3 lib_2IaUGOQ" aria-hidden="true">Most Active</div></div></div>

<div class="" data-selected="false"><div class="lib_33_IXqu lib_10OTPLG lib_rljvxxj lib_2bmVxh4 lib_AWe8PWK lib_NH5Lx3B lib_AWe8PWK"><div class="">Watchers<div class="lib_gdMpTuS lib_3Wb397t lib_QVji0M8 lib_1dwKEN3 lib_2IaUGOQ" aria-hidden="true">Watchers</div></div></div></div>

Tags: divmostby链接libclassactivearia
1条回答
网友
1楼 · 发布于 2024-09-27 22:26:38

这个代码应该可以工作。另外,我注意到,几秒钟后会弹出一个覆盖图,它会打断你的鼠标点击。我已经添加了一行代码来点击它了

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time

# location of chromedriver.exe
driver = webdriver.Chrome("D:/chromedriver/94/chromedriver.exe")

driver.get("https://stocktwits.com/rankings/trending")

# waiting for the links to be available
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//div[@class="lib_33_IXqu lib_10OTPLG lib_rljvxxj lib_2bmVxh4 lib_AWe8PWK lib_NH5Lx3B lib_AWe8PWK"]')))

# capturing the links
links = driver.find_elements(By.XPATH, '//div[@class="lib_33_IXqu lib_10OTPLG lib_rljvxxj lib_2bmVxh4 lib_AWe8PWK lib_NH5Lx3B lib_AWe8PWK"]')

# get rid of the overlay message
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//button[@class="ub-emb-close"]'))).click()

# looping through the links since they all have the same class
for link in links:
    link.click()
    # do something
    time.sleep(2)

您还可以通过URL直接访问这些链接:

  • stocktwits.com/rankings/most-active
  • stocktwits.com/rankings/watchers

我看到覆盖层在一分钟后弹出几次。您可以使用函数创建脚本:

def close_overlay():
    return """
setInterval(()=>{{var overlay = document.querySelector('button[class="ub-emb-close"]');
if(overlay){{overlay.click();}} }}, 5000);
"""

稍后,在脚本中的某个地方调用以下内容:

driver.execute_script(close_overlay())

这个小脚本将每隔5秒检查覆盖上的close按钮并将其关闭

注意:此脚本可能试图在主机器人尝试单击的同时单击关闭按钮。这将导致ElementClickInterceptedException。您可以在代码中处理此异常

虽然这不是必需的,但稍后可能会对您有用

相关问题 更多 >

    热门问题