Selenium无法点击type=button按钮问题求助(附目标网站)
解决Selenium点击"Load All"按钮及提取表格数据问题
1. 定位按钮报错的原因及修复
你触发InvalidSelectorException是因为By.CLASS_NAME不支持传入多个空格分隔的类名(按钮class是" primary load-all btn btn-",包含多个独立类)。改用以下两种定位方式即可:
方式一:CSS选择器(推荐)
利用多类选择器匹配按钮:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待按钮可点击(显式等待避免元素未加载) load_all_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "button.primary.load-all.btn")) ) load_all_btn.click()
方式二:XPATH(通过按钮文本定位)
如果类名有变动风险,用文本定位更稳定:
load_all_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(span/text(), 'Load All')]")) ) load_all_btn.click()
2. 提取Month和PRIORSETTLE列数据
按钮加载完所有数据后,定位表格并提取目标列:
import pandas as pd # 等待表格加载完成 table = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "table.cme-datatable")) ) # 获取表头,确定目标列的索引 headers = [header.text.strip() for header in table.find_elements(By.TAG_NAME, "th")] month_idx = headers.index("Month") prior_settle_idx = headers.index("PRIORSETTLE") # 遍历表格行提取数据 rows = table.find_elements(By.TAG_NAME, "tr")[1:] # 跳过表头行 result = [] for row in rows: cells = row.find_elements(By.TAG_NAME, "td") # 确保行有足够的单元格 if len(cells) > max(month_idx, prior_settle_idx): result.append({ "Month": cells[month_idx].text.strip(), "PRIORSETTLE": cells[prior_settle_idx].text.strip() }) # 转为DataFrame并导出(可选) df = pd.DataFrame(result) df.to_csv("gasoil_data.csv", index=False) print(df)
关键注意点
- 必须使用显式等待(
WebDriverWait),避免页面未加载完成就执行操作 - 确保ChromeDriver版本与本地Chrome浏览器版本一致,否则会出现兼容性问题
- 若网站有反爬限制,可适当添加
time.sleep()或配置ChromeOptions(如禁用图片、启用无头模式)
内容的提问来源于stack exchange,提问作者Adii
相关产品推荐
相关产品推荐

