使用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
相关产品推荐
相关产品推荐

