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

使用Selenium通过XPath定位类实例并点击对应关联PDF图标

问题根因

你当前代码的核心错误是:在for elem in issues_numb循环内,查找PDF图标时调用的是全局driver.find_element方法,哪怕XPath使用了相对路径前缀.,也依然会从整个页面的根节点开始检索,自然每次都会匹配到页面的第一个PDF图标。
你只需要基于当前循环的文章容器元素elem调用find_element方法,就会限定查找范围为当前文章容器的DOM节点内,天然就能实现文章和对应PDF图标的匹配,不需要额外写嵌套循环。


修正后代码

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException

issues_numb = driver.find_elements(By.XPATH, "//section[@class='article-list-item-content-block ']")
parent_tab = driver.current_window_handle

for elem in issues_numb:
    title_article = elem.get_attribute("aria-label")
    print(title_article[13:])
    try:
        # 关键改动:从当前文章容器elem范围内查找PDF图标,而非全局查找
        pdf_icon = elem.find_element(By.XPATH, ".//span[@class='icon fal fa-file-pdf']")
        print(f"pdf object found for {title_article[13:]}")
        ActionChains(driver).move_to_element(pdf_icon).click(pdf_icon).perform()
        WebDriverWait(driver, timeout).until(element_present)
        check_need_to_sign_in()
        driver.switch_to.window(parent_tab)
    except NoSuchElementException:
        print("No PDF available")
        get_article_name()

补充优化建议

  • 若页面是滚动加载模式,每次点击PDF后页面DOM发生刷新,需要在每次循环后重新获取issues_numb元素列表,避免出现StaleElementReferenceException报错
  • 直接定位PDF下载的a标签点击稳定性更高,可替换XPath为:.//a[@aria-label='Download PDF']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:04