如何用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
相关产品推荐
相关产品推荐

