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

使用Python的Selenium库在MyAnimeList上定位元素失败求助

解决MyAnimeList未追番动漫定位与批量追番问题

核心定位思路

之前定位失败大概率是因为依赖了动态生成的class或不稳定属性,改用按钮文本+XPath层级关联的方式可稳定定位未追番的动漫条目。以下是可直接运行的Python+Selenium脚本,实现批量定位未追番动漫、进入详情页完成追番操作。

完整脚本代码

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 StaleElementReferenceException

# 初始化Chrome驱动(确保本地已配置chromedriver环境)
driver = webdriver.Chrome()
driver.maximize_window()

# 目标动漫列表页
target_url = "https://myanimelist.net/anime.php?letter=N&show=400"
driver.get(target_url)

# 设置全局等待超时(10秒)
wait = WebDriverWait(driver, 10)

try:
    # 定位所有显示"Add"按钮的元素
    add_buttons = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//a[normalize-space(text())='Add']")))
    total_anime = len(add_buttons)
    print(f"共找到{total_anime}部未追番动漫")

    # 遍历处理每一部动漫
    for idx in range(total_anime):
        try:
            # 重新定位当前按钮,避免页面刷新导致元素失效
            current_btn = wait.until(EC.presence_of_element_located((By.XPATH, f"(//a[normalize-space(text())='Add'])[{idx+1}]")))
            
            # 获取对应动漫的详情页链接(根据页面DOM层级调整XPath)
            anime_href = current_btn.find_element(By.XPATH, "../../../td[2]/a").get_attribute("href")
            
            # 打开新窗口进入详情页
            driver.execute_script("window.open('');")
            driver.switch_to.window(driver.window_handles[1])
            driver.get(anime_href)

            # 点击详情页的"Add to My List"按钮完成追番
            add_list_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[normalize-space(text())='Add to My List']")))
            add_list_btn.click()

            # 等待追番弹窗关闭(根据实际页面调整等待条件)
            wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, "add-list-modal")))

            # 关闭详情页,切回列表页
            driver.close()
            driver.switch_to.window(driver.window_handles[0])
            print(f"已完成第{idx+1}/{total_anime}部动漫追番")

        except StaleElementReferenceException:
            print(f"第{idx+1}部动漫元素失效,跳过")
            continue

finally:
    # 关闭浏览器
    driver.quit()

关键细节说明

  1. 稳定定位逻辑:

    • 用normalize-space(text())='Add'匹配按钮文本,避免空格或换行符干扰定位
    • 通过XPath层级关联,从Add按钮向上追溯找到动漫标题链接,确保定位准确性
  2. 异常处理:

    • 捕获StaleElementReferenceException,处理页面动态变化导致的元素失效问题
    • 全局等待机制确保元素加载完成后再操作,避免超时报错
  3. 可调整项:

    • 如果页面DOM结构有变化,需修改动漫链接的XPath层级(比如../../../td[2]/a部分)
    • 若需登录,在脚本开头添加登录逻辑:定位用户名/密码输入框,填入信息后点击登录按钮
    • 若追番需要选择观看状态,可在点击"Add to My List"后添加弹窗内的选项选择与保存代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:10:24