点击按钮后无法获取更新HTML/WebDriverWait条件满足仍超时
问题解决:点击"Show All"后无法获取完整表格数据
爬取页面https://www.broadwayworld.com/grosses/A-BEAUTIFUL-NOISETHE-NEIL-DIAMOND-MUSICAL时,点击"Show All"按钮后视觉上表格展开,但获取的仍是点击前的旧数据,添加显式等待后还出现超时问题。
关键问题分析
- Chrome驱动初始化错误:带等待的代码中
webdriver.Chrome(url)是错误用法,驱动初始化不需要传入目标URL,URL应通过driver.get()加载。 - 等待条件写法错误:
By.CLASS_NAME不支持传入多个类名(如btn btn-red show-all-grosses active),无法正确定位到带active类的按钮。 - 缺少表格数据加载等待:按钮添加active类仅代表状态变化,不代表表格数据已完全加载,需要额外等待表格内容更新。
修正后的完整代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service url = 'https://www.broadwayworld.com/grosses/A-BEAUTIFUL-NOISETHE-NEIL-DIAMOND-MUSICAL' # 自动管理Chrome驱动,避免手动配置路径 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) # 定位"Show All"按钮 gross_data_container = driver.find_element(By.CLASS_NAME, 'all-gross-data') show_all_btn = gross_data_container.find_element(By.TAG_NAME, 'button') # 执行点击操作(优先用原生click,遇到拦截再改用execute_script) show_all_btn.click() # 等待按钮激活(用CSS选择器定位多类名元素) WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'button.btn.btn-red.show-all-grosses.active')) ) # 等待表格数据加载完成:通过判断表格行数变化确认(可根据实际情况调整阈值) WebDriverWait(driver, 10).until( lambda d: len(d.find_elements(By.CSS_SELECTOR, '.table-body tr')) > 15 ) # 获取更新后的表格HTML updated_table = driver.find_element(By.CLASS_NAME, 'table-body') table_html = updated_table.get_attribute('outerHTML') print(table_html) driver.quit()
核心修正说明
- 驱动初始化:使用
WebDriverManager自动安装并管理Chrome驱动,无需手动指定驱动路径,避免路径错误。 - 等待条件优化:改用
CSS_SELECTOR定位带active类的按钮,正确识别按钮激活状态。 - 数据加载等待:增加表格行数判断的等待逻辑,确保表格数据完全加载后再获取HTML,避免拿到旧数据。
- 点击方式:优先使用原生
click()方法模拟用户点击,更符合页面交互逻辑,减少异常情况。
内容的提问来源于stack exchange,提问作者Jordan Lingao
相关产品推荐
相关产品推荐

