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
相关产品推荐
相关产品推荐

