Selenium问题:无法定位并点击指定动漫标题可点击元素
问题:无法定位并点击MyAnimeList中匹配输入的动漫标题链接
需求:
- 获取目标网站上的全部动漫
- 选中与输入变量名称一致的动漫
- 点击该动漫标题跳转至详情页进行数据爬取
遇到的问题:所有动漫标题仅共享相同类名且包含<strong>标签,尝试用XPath定位包含输入文本的<a>标签失败。
解决思路
- 放弃易失效的绝对XPath,改用更稳定的元素属性定位
- 修正XPath匹配逻辑:动漫标题文本实际嵌套在
<strong>标签内,需定位包含目标文本的<strong>的父级<a>标签 - 用显式等待替代固定休眠,适配页面加载速度,避免元素未加载完成导致的定位失败
- 增加异常处理,确保浏览器资源正常释放
修正后的代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # 获取用户输入的动漫名称 anime_name = input("Inserisci l'anime che cerchi: ") # 初始化Chrome浏览器 PATH = r"C:\Program Files (x86)\chromedriver.exe" driver = webdriver.Chrome(PATH) try: driver.get("https://myanimelist.net/anime.php") print(driver.title) # 等待并关闭Cookie弹窗 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CLASS_NAME, "css-47sehv")) ).click() # 等待搜索框加载完成,输入关键词并提交 search_box = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.NAME, "q")) ) search_box.click() search_box.send_keys(anime_name) search_box.send_keys(Keys.RETURN) # 定位匹配的动漫标题链接:找到包含目标文本的strong标签,再取其父级a标签 target_link = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, f"//strong[contains(text(), '{anime_name}')]/parent::a")) ) target_link.click() # 此处可添加详情页数据爬取逻辑 print("已成功跳转到动漫详情页") finally: # 等待后关闭浏览器,可根据需求调整等待时间或直接关闭 time.sleep(10) driver.quit()
关键调整说明
- 显式等待优化:使用
WebDriverWait等待元素可点击/可见,比固定time.sleep()更可靠,能自动适配页面加载速度 - XPath逻辑修正:原代码错误地直接匹配
<a>标签文本,实际标题文本在<strong>子标签内,修正后的XPath精准定位到可点击的父级<a>链接 - 搜索框定位优化:改用
By.NAME, "q"定位搜索框,相比绝对XPath,不受页面结构小变动影响,稳定性更高 - 异常处理机制:
try...finally确保无论代码是否出错,浏览器都会正常关闭,避免资源泄漏
内容的提问来源于stack exchange,提问作者JustAMan
相关产品推荐
相关产品推荐

