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

如何使用Python的Selenium触发Punters统计页的Download CSV按钮完成下载?

解决方案

先排查几个常见问题,再给你完整可行的代码方案:

  • 等待元素完全加载:页面是动态渲染的,直接定位会出现元素未加载的情况,必须用显式等待替代硬编码的sleep
  • 精准定位按钮:确认目标元素是<button>标签,用更准确的选择器锁定
  • 处理JS触发逻辑:如果直接click()无效,改用JS执行点击或ActionChains模拟操作
  • 配置自动下载:关闭浏览器下载弹窗,指定本地保存路径避免手动确认

完整代码示例(Chrome浏览器)

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

# 配置Chrome下载参数
options = webdriver.ChromeOptions()
download_prefs = {
    "download.default_directory": "/your/local/download/folder",  # 替换成你的本地路径
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
options.add_experimental_option("prefs", download_prefs)

driver = webdriver.Chrome(options=options)
driver.get("https://www.punters.com.au/stats/")

try:
    # 等待按钮可点击,最长等待10秒
    csv_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button.stats-csv"))
    )
    
    # 滚动到按钮所在位置(避免按钮在视口外无法点击)
    driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", csv_button)
    
    # 优先尝试直接点击,失败则用JS触发点击
    try:
        csv_button.click()
    except:
        driver.execute_script("arguments[0].click();", csv_button)
    
finally:
    # 留5秒等待下载完成后关闭浏览器
    import time
    time.sleep(5)
    driver.quit()

关键注意事项

  • 务必替换/your/local/download/folder为你本地的实际路径,确保路径已存在
  • 如果使用Firefox浏览器,需要修改options配置(改用webdriver.FirefoxOptions(),下载参数配置逻辑不同)
  • 若按钮被弹窗、广告遮挡,需先处理遮挡元素再执行点击
  • 检查页面是否存在iframe,若按钮在iframe内,需先切换到对应iframe:driver.switch_to.frame("iframe_id_or_name")

内容的提问来源于stack exchange,提问作者Mr Ed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:36