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

使用Python Selenium提取符合指定上传日期条件的主文档PDF链接

使用Python Selenium提取符合指定上传日期条件的主文档PDF链接

我来帮你搞定这个问题!你的需求是从表格里筛选出上传日期为1.5.2025的条目,然后提取对应的主文档PDF链接对吧?咱们先看看现有代码的小问题,再一步步修正出高效的解决方案。

首先,你当前代码里的tr_elements定义有问题:你写了列表推导式[tbody.find_elements(By.TAG_NAME,"tr") for tbody in tbodies],但前面只获取了一个tbody变量,并没有tbodies这个集合,这会导致得到一个嵌套列表,后续循环处理肯定乱套。咱们先把这步改对。

接下来,核心逻辑应该是先判断每行的上传日期是否符合要求,符合条件再提取对应PDF链接,而且为了精准性,咱们可以通过a标签的title属性来定位主文档链接(毕竟它的title明确写着"Open main document as 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
from selenium.common.exceptions import NoSuchElementException

PATH = "C:\\Program Files (x86)\\chromedriver.exe"
cService = webdriver.ChromeService(executable_path=PATH)
driver = webdriver.Chrome(service=cService)
href_links = []
target_date = "1.5.2025"

driver.get("https://mydata.com")

# 显式等待表格加载完成,避免页面未加载完全就操作元素
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "DetailTable"))
)

table = driver.find_element(By.CLASS_NAME, "DetailTable")
tbody = table.find_element(By.TAG_NAME, "tbody")
# 直接获取所有表格行,不需要嵌套列表
tr_elements = tbody.find_elements(By.TAG_NAME, "tr")

for tr in tr_elements:
    try:
        # 获取上传日期单元格:表格里第二个<td>(索引从0开始)
        date_cell = tr.find_elements(By.TAG_NAME, "td")[1]
        upload_date = date_cell.text.strip()  # 去除文本前后的空格/换行符

        # 判断日期是否符合目标
        if upload_date == target_date:
            # 通过title属性精准定位主文档PDF的a标签
            main_pdf_a = tr.find_element(By.CSS_SELECTOR, 'a[title="Open main document as PDF"]')
            pdf_href = main_pdf_a.get_attribute("href")
            href_links.append(pdf_href)
            print(f"已找到符合条件的PDF链接:{pdf_href}")
    except IndexError:
        print("该行的单元格数量异常,跳过处理")
    except NoSuchElementException:
        print("该行未找到主文档PDF链接,跳过处理")

# 最后可以打印所有收集到的链接
print("所有符合条件的PDF链接:")
for link in href_links:
    print(link)

# 记得关闭浏览器
driver.quit()

再给你几个小提示:

  • 用WebDriverWait显式等待代替强制等待(比如time.sleep()),能让代码更稳定,避免因为网络慢或页面加载慢导致的元素找不到问题。
  • 用strip()处理日期文本,是因为网页里的文本可能包含多余的空格、换行符,直接比较会出错。
  • 加上try-except块是为了处理一些异常情况,比如某行单元格数量不对,或者没有主文档链接,这样程序不会直接崩溃,而是继续处理下一行。

这样调整后,你的代码就能准确筛选出目标日期的主文档PDF链接啦!

备注:内容来源于stack exchange,提问作者weyronn12934

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:49:35