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

如何使用Selenium自动保存搜索结果中Integral列的PDF文件?

自动保存Selenium搜索结果中“Integral”列的所有PDF文件

当然可以实现自动保存“Integral”列下的所有PDF文件!我给你调整并扩展了代码,解决页面加载等待、PDF自动下载的问题,一步步来:

关键要点说明

  • 处理页面加载等待:直接定位元素容易遇到“元素未找到”的报错,所以用WebDriverWait等待元素就绪,避免超时问题。
  • 配置Firefox自动下载PDF:默认Firefox会打开PDF预览,我们修改浏览器配置,让它直接下载到指定文件夹,不用手动确认弹窗。
  • 稳定下载PDF:用requests库直接下载PDF链接,比单纯点击浏览器链接更可靠,能避免跳转或预览设置的坑。

完整代码实现

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import os

# 配置Firefox自动下载PDF
firefox_options = Options()
# 替换成你想保存PDF的本地文件夹路径
download_dir = "/path/to/your/pdf/folder"
# 如果文件夹不存在,自动创建
os.makedirs(download_dir, exist_ok=True)

# 修改Firefox配置,禁用PDF预览、自动下载
firefox_options.set_preference("browser.download.folderList", 2)
firefox_options.set_preference("browser.download.dir", download_dir)
firefox_options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
firefox_options.set_preference("pdfjs.disabled", True)

# 初始化浏览器(保留你原来的Firefox路径配置)
binary = webdriver.FirefoxBinary('/usr/lib/firefox/firefox')
driver = webdriver.Firefox(firefox_binary=binary, options=firefox_options)

try:
    # 打开目标网站
    driver.get('http://www.stf.jus.br/portal/diariojusticaeletronico/pesquisardiarioeletronico.asp#')
    
    # 等待搜索框加载完成后输入关键词"PPP"
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, 'argumento'))
    )
    search_box.send_keys('PPP')
    
    # 等待搜索按钮可点击后执行搜索
    search_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '/html/body/div/div[3]/div[2]/div[2]/div[2]/form/table/tbody/tr[3]/td/input[1]'))
    )
    search_btn.click()
    
    # 等待搜索结果表格加载,定位"Integral"列下的所有PDF链接
    # 这里的XPath可能需要根据页面实际结构微调,比如如果Integral是第5列,可改成//table//tr/td[5]/a
    integral_links = WebDriverWait(driver, 15).until(
        EC.presence_of_all_elements_located((By.XPATH, '//td[contains(text(), "Integral")]/following-sibling::td/a'))
    )
    
    # 遍历所有链接,下载PDF文件
    for idx, link in enumerate(integral_links):
        pdf_url = link.get_attribute('href')
        # 确认是PDF链接后再下载
        if pdf_url and pdf_url.endswith('.pdf'):
            response = requests.get(pdf_url, stream=True)
            # 生成不重复的文件名
            pdf_filename = f"integral_result_{idx+1}.pdf"
            save_path = os.path.join(download_dir, pdf_filename)
            
            with open(save_path, 'wb') as pdf_file:
                for chunk in response.iter_content(chunk_size=8192):
                    pdf_file.write(chunk)
            print(f"已成功下载: {pdf_filename}")

finally:
    # 无论成功失败,最后都关闭浏览器
    driver.quit()

注意事项

  • 记得把download_dir替换成你本地的文件夹路径,比如"/home/yourname/pdf_downloads"。
  • 如果页面中“Integral”列的结构和我假设的不一样,你可以右键浏览器检查元素,找到该列对应的<a>标签,调整integral_links的XPath表达式。
  • 运行代码前要确保已经安装了selenium和requests库,没装的话可以用pip install selenium requests安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:56:00