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

求定位Refinitiv Workspace表格下载按钮XPATH以实现批量下载

Refinitiv Workspace爬虫批量下载.txt文件问题

我正在做一个针对Refinitiv Workspace网页应用的爬虫项目,该网站需要登录才能访问,无法公开进入。项目目标是自动化下载表格每行对应的.txt文件,目前已经实现登录和导航到目标页面,但没法定位每行的下载图标并触发下载,现有代码如下:

browser = webdriver.Chrome()
browser.get("Website") ##I omitted the complete link as it is very long
browser.find_element(By.ID,'AAA-AS-SI1-SE003').send_keys(r"Email")
browser.find_element(By.ID,'AAA-AS-SI1-SE006').send_keys(r"Password")
browser.find_element(By.ID,'AAA-AS-SI1-SE014').click()
browser.get("https://workspace.refinitiv.com/web/Apps/Corp/?s=ADBE.O&st=RIC#/Apps/AdvEvents?profile=COMPANY&dt=ADBE.O&OAPermID=4295905431")
browser.find_element(By.XPATH,'//*[@id="section0"]/div/div/div/div[9]/div[1]/div/app-download-formatter/coral-button[3]').click() ##This is supposed to click on the txt icon which will lead to a download of the file

解决思路与实现步骤

1. 替换硬编码的绝对XPATH

你当前用的是绝对路径,页面元素位置变动就会失效,改用相对定位匹配所有行的下载按钮:

  • 优先通过元素的特征(比如标签、 aria-label、文本提示)定位,示例代码:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待页面渲染完成,避免元素未加载
wait = WebDriverWait(browser, 10)
# 匹配所有带TXT下载标识的按钮
download_buttons = wait.until(EC.presence_of_all_elements_located(
    (By.XPATH, "//app-download-formatter//coral-button[contains(@aria-label, 'TXT') or contains(., 'TXT')]")
))

2. 批量遍历触发下载

遍历按钮列表,逐个触发下载,处理可能的元素不可点击问题:

import time

for btn in download_buttons:
    # 若直接click失败,用JS强制触发点击
    browser.execute_script("arguments[0].click();", btn)
    # 等待当前文件下载完成,可根据实际速度调整时长
    time.sleep(2)

3. 配置Chrome自动下载(可选)

提前设置下载目录,避免弹窗询问:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 替换为你的本地下载路径
prefs = {"download.default_directory": "/Users/xxx/Downloads/refinitiv_data"}
chrome_options.add_experimental_option("prefs", prefs)
browser = webdriver.Chrome(options=chrome_options)

4. 处理分页逻辑(若表格有多页)

如果数据分页展示,需自动切换分页重复下载:

while True:
    # 执行当前页的下载逻辑
    # ... 上述下载代码 ...
    
    # 定位下一页按钮,判断是否可点击
    try:
        next_page_btn = browser.find_element(By.XPATH, "//button[contains(text(), '下一页')]")
        if "disabled" in next_page_btn.get_attribute("class"):
            break
        next_page_btn.click()
        time.sleep(3) # 等待分页加载
    except:
        # 找不到下一页按钮,退出循环
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:17:25