You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Quora评论区悬浮元素中提取评论者所在地?

Quora评论区作者所在地提取问题修复

问题根源

你代码里用了全局XPath查找所在地,每次都会命中页面第一个符合条件的元素(也就是发帖人的信息),而非当前悬停的评论作者。另外,你直接把元素对象存进列表,没提取文本,结果自然不对。

修复后的代码

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

cmts = []

all_comments = driver.find_elements(By.CSS_SELECTOR, 'div[class="q-box qu-ml--small qu-flex--auto"]')

for comment in all_comments:
    # 定位当前评论的作者链接
    cmter_link = comment.find_element(By.CSS_SELECTOR, 'a.q-box.puppeteer_test_link.qu-color--gray_dark.qu-cursor--pointer.qu-hover--textDecoration--underline')
    
    # 悬停作者链接触发弹窗
    webdriver.ActionChains(driver).move_to_element(cmter_link).perform()
    
    # 显式等待弹窗加载,替代固定sleep更靠谱
    try:
        # 只在当前悬停的弹窗里找所在地,避免全局匹配
        loc_element = WebDriverWait(driver, 3).until(
            EC.presence_of_element_located(
                (By.XPATH, '//div[contains(@class, "q-popover")]//div[@class="q-text qu-truncateLines--2"][contains(., "Lives in") or contains(., "Lived in")]/span/span')
            )
        )
        cmterloc = loc_element.text
    except:
        cmterloc = 'None'
    
    # 提取评论内容,去掉首尾空白
    cmt_content = comment.find_element(By.CSS_SELECTOR, 'div.q-text').text.strip()
    
    # 过滤空评论和重复条目
    if cmt_content and [cmter_link.text, cmterloc, cmt_content] not in cmts:
        cmts.append([cmter_link.text, cmterloc, cmt_content])

# 输出预期格式的结果
for entry in cmts:
    print(entry)

核心修改说明

  • 锁定弹窗范围:用q-popover容器限定查找范围,确保只抓取当前悬停作者的弹窗信息,不会错拿发帖人数据。
  • 提取文本内容:把cmterloc改成获取元素的.text,存的是真实的所在地字符串,而非无效的元素对象。
  • 替换固定等待:用显式等待替代time.sleep,等弹窗加载完成再抓取,避免因加载慢导致的失败。
  • 简化选择器:去掉冗余的长类名,保留关键标识,让选择器更稳定,不容易因为页面样式更新失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:17:07