如何用Selenium点击匈牙利Hudex网站的Month按钮?
问题分析与解决方案
核心问题
你的代码存在两个关键问题导致「Month」按钮点击无响应:
- XPath语法错误:按钮定位的XPath写法不符合规范,无法正确匹配目标元素
- 未等待元素可交互:直接调用
find_element可能元素还未完全加载或处于不可点击状态
修正步骤
1. 修复XPath定位
- Cookie按钮的正确XPath:
//button[@class="button primary" and normalize-space(text())="Accept"](用normalize-space处理文本可能存在的空格) - Month按钮的正确XPath:
//a[@class="button text-nowrap" and normalize-space(text())="Month"]
2. 使用显式等待确保元素可点击
利用WebDriverWait等待元素处于可点击状态后再执行点击操作,避免因元素未加载完成导致的无响应。
3. 优化代码结构
移除重复导入的模块,使用Service管理ChromeDriver路径,提升代码规范性。
修正后的完整代码
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 selenium.webdriver.chrome.service import Service import pandas as pd import time # 初始化ChromeDriver服务 service = Service("C:/Users/diyorda02/Downloads/chromedriver-win64/chromedriver-win64/chromedriver.exe") driver = webdriver.Chrome(service=service) driver.get("https://hudex.hu/en/market-data/power/daily-data#short-term") # 等待并点击Cookie弹窗的Accept按钮 wait = WebDriverWait(driver, 10) accept_cookie_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@class="button primary" and normalize-space(text())="Accept"]'))) accept_cookie_btn.click() # 等待并点击Month按钮 month_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//a[@class="button text-nowrap" and normalize-space(text())="Month"]'))) month_btn.click() # 后续提取下月期货数据的代码... # 关闭浏览器(可选) # driver.quit()
额外注意事项
- 如果页面存在iframe,需要先切换到对应的iframe再定位元素(检查页面源码确认)
- 若按钮点击后页面有加载延迟,可添加
time.sleep(2)等待页面更新,但优先使用显式等待而非强制休眠
内容的提问来源于stack exchange,提问作者Dilyan
相关产品推荐
相关产品推荐

