You need to enable JavaScript to run this app. Python Selenium提取鼠标悬停元素内链接报错无法跳转如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium提取鼠标悬停元素内链接报错无法跳转如何解决

Selenium 悬停元素点击报错修复方案

核心问题点

  • 元素加载顺序逻辑错误:你要点击的hover弹窗属于交互触发类元素,默认不会渲染到DOM结构中,必须先把鼠标悬停到触发区域.basicsCampaignOwner-details-name上,弹窗才会加载。你当前代码在未执行悬停动作的前提下就提前等待弹窗元素加载,必然触发超时异常,导致campaign_link变量没有完成赋值,最终抛出NameError。
  • 预期条件方法传参格式错误:EC.element_to_be_clickable()要求传入的参数是(定位方式, 定位规则)组成的二元组,你代码中漏了外层括号,参数格式错误会直接抛出异常,打断变量赋值流程。
  • 动作链逻辑冗余:不需要依次将鼠标移动到三个元素上,仅需先触发悬停加载弹窗,再点击目标链接即可,多余的移动动作反而容易触发弹窗失焦消失。

修正后可运行代码

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

# 配置驱动
fp = webdriver.FirefoxProfile()
fp.set_preference("network.cookie.cookieBehavior", 2)

driver = webdriver.Firefox(firefox_profile=fp)
wait = WebDriverWait(driver,10)
driver.get('https://www.indiegogo.com/projects/flash-pro-world-s-fastest-powerbank-redesigned#/')

# 第一步:定位悬停触发元素
campaign_info = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".basicsCampaignOwner-details-name > span:nth-child(1) > span:nth-child(1) > div:nth-child(1)")))
# 第二步:执行悬停动作触发弹窗加载
ActionChains(driver).move_to_element(campaign_info).perform()
# 第三步:等待弹窗内链接可点击
campaign_link = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".tooltipHover-hoverContent-body > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > a:nth-child(4)")))
# 第四步:点击链接
campaign_link.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:48:04