Selenium技术求助:使用ChromeDriver与Python爬取网页遇下载路径问题
解决Selenium批量下载ASC评估师数据的方案
原代码存在的问题
- 驱动不匹配:使用Edge浏览器却指定
chromedriver.exe,应该用Edge专属的msedgedriver.exe - 缺少等待逻辑:页面加载、元素渲染需要时间,直接查找元素大概率报错
- 未配置下载目录:没有指定文件保存路径,无法控制下载位置
- 语法错误:
click()后直接跟quicksearchtable属于无效代码,会导致运行失败
优化后的完整代码
import os 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.edge.options import Options # 配置浏览器选项,指定下载目录 download_dir = "D:/ASC_Downloads" # 替换成你的目标目录 # 确保目录存在,不存在则创建 if not os.path.exists(download_dir): os.makedirs(download_dir) edge_options = Options() prefs = { "download.default_directory": download_dir, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True } edge_options.add_experimental_option("prefs", prefs) # 初始化Edge驱动(确保msedgedriver.exe路径与你的Edge版本匹配) driver = webdriver.Edge(options=edge_options, executable_path='C:/Users/msedgedriver.exe') driver.maximize_window() try: # 打开目标网站 driver.get('https://asc.gov/appraiser') # 等待Quick Search单选按钮加载并点击 quick_search_radio = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//input[@quicksearch-page1='TSVRadioButton']")) ) quick_search_radio.click() # 等待Apply按钮并点击(补充流程中缺失的步骤) apply_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Apply')]")) ) apply_btn.click() # 等待Download按钮加载并点击 download_btn = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//*[@class='Downloader']")) ) download_btn.click() # 等待下载选项并触发下载 download_option = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "Download_0")) ) driver.execute_script("arguments[0].click();", download_option) # 等待大文件下载完成(根据网速调整等待时间,这里设置2分钟) WebDriverWait(driver, 120).until( lambda d: any(f.endswith(('.xlsx', '.csv')) for f in os.listdir(download_dir)) ) finally: # 关闭浏览器 driver.quit()
关键注意事项
- 驱动匹配:务必下载与本地Edge浏览器版本一致的
msedgedriver.exe,路径要准确 - 显式等待:用
WebDriverWait替代强制等待,避免元素未加载导致的报错 - 下载目录配置:
download_dir替换成你需要的路径,代码会自动创建不存在的目录 - 大文件处理:30万条数据的文件体积较大,需延长等待时间;也可以优化文件检查逻辑,比如判断文件是否停止写入
- 高效备选方案:如果Selenium下载不稳定,建议直接抓网站的API接口(通过浏览器F12抓包获取下载请求参数),用
requests库批量请求数据,效率比浏览器下载高得多
内容的提问来源于stack exchange,提问作者AKS
相关产品推荐
相关产品推荐

