You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:15:38