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

Selenium Python点击带onclick事件的锚点标签无法下载文件

解决Selenium点击带onclick事件锚点无响应问题

问题场景

目标网站的下载链接为带JavaScript onclick事件的锚点:

<a href="#divListaArquivos" onclick="carregarDownloadArquivo('11-08-2022')">Negociação Balcão - 11/08/2022</a>

使用Selenium的click()方法点击该元素时无任何反应,无论通过链接文本还是XPATH定位均无法触发下载。

可行解决方案

1. 直接执行目标JavaScript代码

既然元素的核心动作是调用carregarDownloadArquivo('11-08-2022'),可以跳过元素点击,直接让浏览器执行这段脚本:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://bvmf.bmfbovespa.com.br/NegociosRealizados/Registro/Index/pt-BR?Length=8")

# 等待页面加载完成后执行JS
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, "/html/body/div/div[4]/div[3]/div/div/div/div[1]/div[2]/p/a")))
driver.execute_script("carregarDownloadArquivo('11-08-2022')")

2. 模拟真实鼠标交互

若元素存在层级遮挡或事件绑定在父元素上,可使用ActionChains模拟完整的鼠标点击流程:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
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.common.action_chains import ActionChains

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get("https://bvmf.bmfbovespa.com.br/NegociosRealizados/Registro/Index/pt-BR?Length=8")

element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "/html/body/div/div[4]/div[3]/div/div/div/div[1]/div[2]/p/a")))
# 移动到元素位置再执行点击
ActionChains(driver).move_to_element(element).click().perform()

3. 配置Chrome自动下载设置

确保浏览器允许自动下载文件,避免弹出确认框中断流程:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
prefs = {
    "download.default_directory": "/你的本地下载路径",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
driver.get("https://bvmf.bmfbovespa.com.br/NegociosRealizados/Registro/Index/pt-BR?Length=8")

额外优化建议

  • 绝对XPATH易因页面结构变化失效,建议改用更稳定的定位方式,比如通过链接文本:
    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Negociação Balcão - 11/08/2022")))
    
  • 若页面包含iframe,需先切换到对应iframe再定位元素。

内容的提问来源于stack exchange,提问作者Breno Barbosa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:06:17