使用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()
关键细节说明
稳定定位逻辑:
- 用
normalize-space(text())='Add'匹配按钮文本,避免空格或换行符干扰定位 - 通过XPath层级关联,从Add按钮向上追溯找到动漫标题链接,确保定位准确性
- 用
异常处理:
- 捕获
StaleElementReferenceException,处理页面动态变化导致的元素失效问题 - 全局等待机制确保元素加载完成后再操作,避免超时报错
- 捕获
可调整项:
- 如果页面DOM结构有变化,需修改动漫链接的XPath层级(比如
../../../td[2]/a部分) - 若需登录,在脚本开头添加登录逻辑:定位用户名/密码输入框,填入信息后点击登录按钮
- 若追番需要选择观看状态,可在点击"Add to My List"后添加弹窗内的选项选择与保存代码
- 如果页面DOM结构有变化,需修改动漫链接的XPath层级(比如
内容的提问来源于stack exchange,提问作者Clark Wallace
相关产品推荐
相关产品推荐

