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

如何使用Python爬取隐藏在选择选项下的PDF文件

Python 批量下载层级选项下PDF文件的实操方案

针对你描述的「一级选项点击展开二级列表、点击文件链接弹出预览、预览页才能拿到PDF入口」的场景,新手最容易落地的是用Selenium模拟人工操作的方案,不用复杂的接口抓包,直接复刻手动操作流程即可,具体步骤和代码如下:

环境准备

先安装所需依赖:

pip install selenium requests

然后下载和你的Chrome浏览器版本匹配的chromedriver,放到Python安装根目录或者爬虫脚本同目录下即可。

实现逻辑

完全复刻手动下载的操作流程,用代码自动执行:

  1. 打开目标网站
  2. 模拟点击一级选项的「选项1」,等待二级列表加载完成
  3. 抓取二级列表下所有文件跳转链接元素
  4. 循环遍历每个链接:
    • 点击文件跳转链接,弹出预览窗口
    • 抓取预览窗口右上角「查看PDF」按钮的PDF直链
    • 请求直链保存PDF到本地
    • 关闭预览窗口,处理下一个文件

示例代码

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

# 初始化Chrome浏览器
driver = webdriver.Chrome()
# 替换为你要爬取的目标网站地址
driver.get("https://你的目标网站地址")
# 设置元素最长等待时间为10秒,避免页面没加载完报错
wait = WebDriverWait(driver, 10)

try:
    # 1. 点击一级选项「选项1」,此处XPATH需替换为你网站实际元素的XPATH
    option1 = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[text()="选项1"]')))
    option1.click()
    time.sleep(2)

    # 2. 抓取二级列表所有文件跳转链接元素,此处XPATH需替换为你网站实际元素的XPATH
    file_link_list = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//二级列表容器的XPATH//a[contains(text(),"文件跳转链接")]')))
    total_count = len(file_link_list)
    print(f"共匹配到{total_count}个PDF文件")

    # 3. 循环下载所有PDF
    for index in range(total_count):
        # 每次循环重新获取元素,避免页面刷新导致元素失效报错
        current_file_link = wait.until(EC.presence_of_all_elements_located((By.XPATH, '//二级列表容器的XPATH//a[contains(text(),"文件跳转链接")]')))[index]
        current_file_link.click()

        # 抓取PDF直链
        pdf_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[text()="查看PDF"]')))
        pdf_download_url = pdf_btn.get_attribute("href")

        # 保存PDF到本地,可自定义文件名
        pdf_resp = requests.get(pdf_download_url)
        with open(f"第{index+1}份文件.pdf", "wb") as f:
            f.write(pdf_resp.content)
        print(f"已完成:{index+1}/{total_count}")

        # 关闭预览弹窗,此处XPATH替换为你网站弹窗关闭按钮的XPATH,也可以模拟按ESC键关闭
        close_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//弹窗关闭按钮的XPATH')))
        close_btn.click()
        time.sleep(1)

finally:
    # 所有操作完成后关闭浏览器
    driver.quit()

注意事项

  • 代码中所有的XPATH定位都需要替换为你目标网站对应元素的实际XPATH,获取方式:浏览器中右键对应元素→点击「检查」→在弹出的元素面板右键对应元素代码行→「复制」→「复制XPATH」即可
  • 若网站有反爬机制,可适当调大sleep的等待时长,或者添加随机延迟,避免触发反爬规则
  • 如果网站需要登录才能访问资源,可以在代码打开浏览器后先手动完成登录,再执行后续逻辑即可
  • 若PDF下载需要校验身份cookie,可以直接从driver.get_cookies()获取Selenium当前会话的cookie,传给requests的请求参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:24:09