如何通过Selenium点击元素下载无直接链接的文件(Python实现)
问题排查与修复方案
核心问题点
- 重复初始化
ChromeOptions实例,覆盖了之前配置的下载路径偏好,导致下载目录设置无效 - 元素定位前未等待页面加载完成,直接查找元素容易出现未找到的情况
driver.Quit()存在语法错误,正确写法是driver.quit()
修复后的完整代码
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 # 仅初始化一次ChromeOptions,配置下载路径 options = webdriver.ChromeOptions() prefs = {"download.default_directory": "C:/Users/toto/Downloads"} options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(options=options) # 设置全局隐式等待,提升元素查找稳定性 driver.implicitly_wait(15) url = 'https://open.efsa.europa.eu/study-inventory/EFSA-Q-2022-00556' driver.get(url) # 用显式等待确保元素可点击,避免页面加载慢导致定位失败 download_btn = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(),'Download all evidences')]")) ) download_btn.click() # 等待下载完成(可根据文件大小调整等待时长) driver.implicitly_wait(30) driver.quit()
备选定位方案(原XPATH失效时使用)
如果按钮文本嵌套在<span>标签内,可尝试以下定位方式:
- XPATH匹配嵌套文本:
"//button[.//span[contains(text(),'Download all evidences')]]" - CSS选择器(Chrome 101及以上版本支持):
"button:has(span:contains('Download all evidences'))" - 按class属性定位(需确认按钮实际class名):
By.CLASS_NAME, "对应的class名称"
内容的提问来源于stack exchange,提问作者EricP
相关产品推荐
相关产品推荐

