You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium Python点击screener.in网站中的所有加号按钮?

解决Selenium Python点击screener.in所有加号按钮的问题

要点击目标页面上所有的加号(+)按钮,你可以按照以下步骤实现,核心是准确定位元素并处理动态页面的加载状态:

步骤说明

  • 等待页面完全加载:目标网站是动态渲染的,必须等待关键元素加载完成后再操作。
  • 定位所有加号按钮:通过XPATH定位所有文本为+的按钮,或者通过元素的class属性(该网站中加号按钮的class通常包含icon-plus)。
  • 循环点击按钮:遍历所有找到的按钮,逐个点击;同时处理可能出现的元素状态异常(比如点击后DOM变化导致元素失效)。

完整代码

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException, ElementClickInterceptedException
import time

# 初始化Chrome驱动
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.screener.in/company/HAL/')

# 等待页面加载完成,这里等待第一个加号按钮出现
wait = WebDriverWait(driver, 15)
wait.until(EC.presence_of_element_located((By.XPATH, "//button[text()='+']")))

# 循环点击所有加号按钮,处理可能的异常
while True:
    # 每次循环重新获取按钮列表,避免StaleElementReferenceException
    plus_buttons = driver.find_elements(By.XPATH, "//button[text()='+']")
    if not plus_buttons:
        break
    for button in plus_buttons:
        try:
            # 滚动到按钮可见位置
            driver.execute_script("arguments[0].scrollIntoView(true);", button)
            # 等待按钮可点击
            WebDriverWait(driver, 5).until(EC.element_to_be_clickable(button)).click()
            time.sleep(0.5)  # 给页面一点加载时间
        except (StaleElementReferenceException, ElementClickInterceptedException):
            # 如果元素失效或被遮挡,跳过继续下一个
            continue

# 操作完成后关闭浏览器
driver.quit()

关键细节说明

  • 重新获取元素列表:每次循环都重新查找按钮,因为点击某个加号后页面DOM可能更新,之前获取的元素会失效(触发StaleElementReferenceException)。
  • 滚动到元素可见:部分加号按钮可能在页面下方,需要先滚动到可视区域才能点击。
  • 异常处理:捕获常见的点击异常,避免程序中途崩溃。
  • 等待机制:使用WebDriverWait替代固定等待,确保元素处于可操作状态再执行点击。

内容的提问来源于stack exchange,提问作者Sumit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:27:19