如何在Selenium中获取悬停文本?附场景示例与代码问题
解决Agoda页面悬停文本获取失败的问题
问题原因
原代码直接查找CapacityTooltipBody-item元素,但该元素属于悬停触发的tooltip组件,默认处于隐藏未渲染状态,只有当鼠标悬停在对应房型的图片/区域上时才会显示,因此直接查找会返回空列表。
解决方案
需要先模拟鼠标悬停触发tooltip显示,再获取目标文本,具体步骤如下:
- 定位到触发tooltip的房型元素
- 用
ActionChains模拟鼠标悬停动作 - 用显式等待确保tooltip加载完成后提取文本
修改后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" options = webdriver.FirefoxOptions() options.add_argument(f"--user-agent={user_agent}") driver = webdriver.Firefox(options=options) wait = WebDriverWait(driver, 20) try: driver.get("https://www.agoda.com/sudima-lake-rotorua-hotel/hotel/rotorua-nz.html?finalPriceView=1&isShowMobileAppPrice=false&cid=-1&numberOfBedrooms=&familyMode=false&adults=2&children=0&rooms=1&maxRooms=0&checkIn=2022-12-4&isCalendarCallout=false&childAges=&numberOfGuest=0&missingChildAges=false&travellerType=-1&showReviewSubmissionEntry=false¤cyCode=USD&isFreeOccSearch=false&isCityHaveAsq=false&tspTypes=2&los=6&searchrequestid=556b0085-60c1-4ea4-aed1-9783838b9351") driver.set_window_size(1920, 1080) # 等待第一个房型元素加载完成(可根据需求切换为其他房型) trigger_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.PropertyCardImageContainer'))) # 模拟鼠标悬停触发tooltip ActionChains(driver).move_to_element(trigger_element).perform() # 等待tooltip文本元素可见后提取内容 tooltip_items = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div.CapacityTooltipBody-item'))) res_list = [item.text for item in tooltip_items] print("res_list", res_list) finally: driver.quit()
补充说明
- 替换了过时的User-Agent,降低被网站识别为异常请求的概率
- 用
WebDriverWait显式等待替代随机sleep,提升代码稳定性 - 若需要获取所有房型的悬停文本,可循环遍历所有
PropertyCardImageContainer元素,逐个执行悬停和文本提取操作
内容的提问来源于stack exchange,提问作者tientoen
相关产品推荐
相关产品推荐

