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

网页爬取遇无href导出按钮:能否替代pynput获取NHL数据?

替代pynput模拟点击的更优方案

方案1:用Selenium直接定位元素点击

无需依赖屏幕坐标,直接通过元素的class属性定位按钮,用Selenium原生点击方法更可靠,不受窗口大小、设备分辨率变化影响。

修改后的代码:

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
import time

# 初始化Chrome浏览器
driver = webdriver.Chrome(executable_path='somepath\chromedriver.exe')
URL = 'https://www.nhl.com/stats/teams'
driver.get(URL)

# 显式等待导出按钮加载完成(比固定sleep更稳定)
try:
    # 通过class定位导出按钮
    export_button = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'styles__ExportIcon-sc-16o6kz0-0'))
    )
    # 执行点击操作
    export_button.click()
finally:
    # 等待下载启动后关闭浏览器(可根据需求调整)
    time.sleep(3)
    driver.quit()

优势:

  • 摆脱屏幕坐标依赖,适配不同设备和窗口状态
  • 显式等待确保元素加载完成后再操作,避免页面加载慢导致的报错
  • 无需额外安装pynput库,仅依赖Selenium原生API

方案2:抓包获取直接下载链接

如果希望跳过浏览器模拟,可通过开发者工具抓包找到Excel导出的真实请求链接,用requests库直接下载,效率更高。

操作步骤:

  1. 打开目标页面,按F12打开开发者工具
  2. 切换到「网络」标签页,点击页面上的导出按钮
  3. 在请求列表中找到导出相关的接口(通常包含export或xlsx关键词),复制完整请求URL和请求头(重点是Cookie和Referer)
  4. 用requests发送请求下载文件

示例代码:

import requests

# 替换为抓包得到的真实下载链接
download_url = "https://www.nhl.com/stats/teams/export?format=xlsx&..."
headers = {
    "Cookie": "你的页面Cookie",
    "Referer": "https://www.nhl.com/stats/teams"
}

response = requests.get(download_url, headers=headers)
with open("nhl_teams_data.xlsx", "wb") as f:
    f.write(response.content)

注意事项:

  • Cookie存在时效性,过期后需要重新抓包获取
  • 部分网站的导出链接可能包含签名参数,需每次抓包更新

总结

优先选择方案1,实现简单且稳定性高;若追求无浏览器的高效下载,可采用方案2抓包获取直链。

内容的提问来源于stack exchange,提问作者Dominik Streibl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:40:55