求定位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
相关产品推荐
相关产品推荐

