Selenium无法点击JavaScript按钮问题求解(附代码)
问题:无法点击页面"加载更多"按钮(href为javascript:void(0))
- 已在多个技术平台查找解决方案均无效,找到的相近方案也无法适配当前场景
- 目标页面需点击id为
sneaker-release-load-more-btn的按钮加载更多乔丹鞋款信息
原尝试代码
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time from selenium.webdriver.common.action_chains import ActionChains if __name__ == '__main__': driver = uc.Chrome(version_main=106) driver.get("https://sneakernews.com/air-jordan-release-dates/") # # WebDriverWait(driver, 30).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "div[class='content-box']")) # # ) WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='sneaker-release-load-more-btn']"))).click() WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.ID, ".//div[@class='more-button']/div/a[@id='sneaker-release-load-more-btn']"))) jordan_names = driver.find_elements(By.ID,".//div[@class='more-button']/div/a[@id='sneaker-release-load-more-btn']") print(jordan_names)
有效解决方案
你的代码存在定位器类型错误、等待逻辑错误、目标元素查找错误三个核心问题,修正后代码如下:
import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains if __name__ == '__main__': driver = uc.Chrome(version_main=106) driver.get("https://sneakernews.com/air-jordan-release-dates/") # 等待加载更多按钮可点击,用ActionChains模拟点击适配JS绑定按钮 load_more_btn = WebDriverWait(driver, 30).until( EC.element_to_be_clickable((By.ID, "sneaker-release-load-more-btn")) ) ActionChains(driver).move_to_element(load_more_btn).click().perform() # 等待新内容加载完成(以鞋款条目元素为等待目标) WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.CSS_SELECTOR, "div.release-item")) ) # 获取所有乔丹鞋款名称并打印 jordan_names = driver.find_elements(By.CSS_SELECTOR, "div.release-item h3 a") for name in jordan_names: print(name.text) driver.quit()
核心修正说明
- 定位器修正:
By.ID仅需传入纯ID值,无需XPath路径;查找鞋款使用对应CSS选择器,而非错误定位按钮元素 - 点击方式优化:用
ActionChains模拟鼠标移动+点击,适配javascript:void(0)类型的JS绑定按钮,避免直接click()失效 - 等待逻辑调整:点击后等待新的鞋款条目加载完成,而非重复等待按钮,确保数据已更新
内容的提问来源于stack exchange,提问作者Jason Ang
相关产品推荐
相关产品推荐

