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

使用Selenium爬取tandfonline遇元素找不到错误及循环点击期刊求助

解决Tandfonline期刊爬取的元素定位及循环翻页问题

一、为什么会触发NoSuchElementException?

你用的vnvpp20-18是动态生成的ID,这类ID通常和具体期数绑定,换一期就会变更,所以Selenium找不到元素。得改用页面上稳定不变的属性来定位期数按钮,比如类名、通用属性或者标签组合。

二、怎么找到正确的定位符?

打开浏览器F12开发者工具,定位目标期数按钮的HTML结构:

  • 优先看按钮的类名,比如Tandfonline常见的issue-link、issue-item这类通用类;
  • 也可以看父容器的标识,比如所有期数都在class="issues-container"的标签下;
  • 若类名不明确,也能用包含期数特征的XPATH,比如//a[contains(@href, "issue")](优先用类,XPATH易受页面结构变动影响)。

给你一个通用的定位示例:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("你的期刊列表页URL")

# 用显式等待替代隐式等待,适配页面加载延迟
wait = WebDriverWait(driver, 10)

# 定位第一期按钮(假设类名为issue-link)
first_issue = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.issue-link")))
first_issue.click()

三、实现爬完单期后循环点击下一期的逻辑

核心思路是:爬完当前期数据后,要么回到期刊列表页点击下一个按钮,要么在当期页直接点击「下一期」按钮,直到无下期可爬为止。

方案1:从期刊列表页依次遍历每一期

# 先获取所有期数按钮的列表
wait = WebDriverWait(driver, 10)
issue_buttons = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a.issue-link")))

# 循环处理每一期
for button in issue_buttons:
    button.click()
    
    # --------------------------
    # 这里写爬取当期文章数据的代码
    # 比如提取标题、摘要、作者等内容
    # --------------------------
    
    # 爬完后回到列表页,重新等待页面加载
    driver.back()
    wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a.issue-link")))

方案2:在当期页点击「下一期」按钮(如果页面有该按钮)

如果当期页面底部有「Next Issue」类的按钮,直接定位循环点击:

while True:
    # --------------------------
    # 爬取当前期文章数据的代码
    # --------------------------
    
    try:
        # 定位下一期按钮(按文本特征匹配)
        next_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(text(), 'Next Issue')]")))
        next_button.click()
        # 等待当期页面加载完成(替换成文章列表的标识类)
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, "article-list")))
    except:
        # 找不到下一期按钮,结束循环
        break

四、额外注意事项

  • 机构权限:确保浏览器会话已通过机构认证(比如校园网登录、Cookie有效),避免跳转到登录页;
  • 反爬规避:每次操作后加time.sleep(2)(需导入time模块),降低请求频率;
  • 定位适配:如果上述类名/XPATH不匹配你的目标页面,直接用F12重新抓取实际页面的元素属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:25:08