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

在Selenium中遍历Web元素获取Facebook指定关键词页面链接失败求助

Facebook搜索页面获取页面链接问题解决

问题说明

我想在Facebook搜索页面(关键词为orange,测试链接:https://www.facebook.com/search/pages/?q=orange)中抓取对应页面的链接,折腾了好几个小时都没成功。使用的代码如下,执行后没有任何输出:

first_result = self.driver.find_element(
    By.XPATH, "(//div[@role='feed'])[1]") # 获取div容器

ok1 = first_result.find_elements(
    By.CSS_SELECTOR, "div[role='article']")
# 用CSS选择器获取每个div,因为用类名只能拿到第一个元素

ok = ok1.find_elements(
    By.CLASS_NAME, "aeinzg81 i15ihif8 cgu29s5g jg3vgc78 gb2oqlaf")

# 包含文本的类
for _ in ok:
    print(_.text) # 本来想拿href,先打印文本看结果,结果啥都没有

问题原因

  1. 类名动态生成:Facebook的元素类名是随机动态生成的,每次刷新页面都会变化,固定写死类名肯定找不到元素。
  2. 元素加载未等待:页面还没完全加载就执行查找操作,此时目标元素还没渲染出来。
  3. 方法调用错误:ok1是find_elements返回的元素列表,不能直接调用find_elements,得遍历每个元素去查找子元素。
  4. 定位逻辑偏差:原代码定位的类并非实际包含页面链接的元素,定位路径不对。

修正后的代码

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

# 显式等待feed容器加载完成,最长等10秒
feed_container = WebDriverWait(self.driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@role='feed']"))
)

# 获取所有搜索结果的article元素
articles = feed_container.find_elements(By.CSS_SELECTOR, "div[role='article']")

for article in articles:
    try:
        # 用链接的href特征定位,比类名稳定
        page_link = article.find_element(By.XPATH, ".//a[contains(@href, '/pages/') or contains(@href, '/profile.php')]")
        # 提取页面名称和链接
        page_name = page_link.text.strip()
        page_href = page_link.get_attribute("href")
        if page_name and page_href:
            print(f"{page_name}: {page_href}")
    except Exception:
        # 跳过无法定位的元素,避免循环中断
        continue

额外注意点

  • 必须确保Driver处于登录Facebook的状态,未登录的搜索页面结果受限。
  • 如果要抓取更多结果,需要模拟滚动页面到底部,等待新元素加载后再继续遍历。
  • Facebook反爬严格,不要频繁快速请求,适当加入time.sleep()间隔,避免账号被限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:37:26