Python+Selenium如何获取Facebook上悬停后才生效的评论链接?
解决Facebook爬虫悬停才加载评论链接的方案
针对你遇到的日期链接hover前为href='#'的场景,有两种可直接落地的实现思路:
方案1:用Selenium模拟鼠标悬停触发链接加载
这是最贴合前端交互逻辑的实现方式,直接调用Selenium的ActionChains类模拟悬停动作,触发前端渲染真实链接后再提取即可,示例代码如下:
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() # 打开目标FB页面后,先滚动加载所有需要的帖子 # 定位所有日期元素,这里的选择器你可以根据自己的页面结构调整 date_elements = driver.find_elements(By.CSS_SELECTOR, 'your-date-element-selector') for ele in date_elements: # 模拟悬停到当前日期元素 ActionChains(driver).move_to_element(ele).perform() # 显式等待,直到href属性不再是# WebDriverWait(driver, 5).until( lambda x: ele.get_attribute('href') != '#' ) # 提取真实链接 real_url = ele.get_attribute('href') print(real_url) # 批量操作加短延迟避免触发反爬 time.sleep(0.5)
你观察到的aria-describedby是悬停后生成的提示浮层的关联属性,不影响链接提取,只要确保悬停后href更新再提取即可。
方案2:直接拼接链接(更高效,无需模拟交互)
FB的帖子链接规则是固定的,格式为https://www.facebook.com/[用户名]/posts/[帖子ID],你可以直接从日期元素的data-ft、data-post-id等自定义属性中提取到帖子ID,再结合页面对应的用户名直接拼接出完整链接,完全不用处理悬停逻辑,爬取效率更高,也更不容易被反爬策略识别。
最后注意:如果是批量爬取FB内容,建议控制请求频率,做好账号隔离,避免被限制访问。
内容的提问来源于stack exchange,提问作者Николай Нарушев
相关产品推荐
相关产品推荐

