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

使用Selenium爬取HackerOne网页时无法获取任何数据是什么原因?

问题根因

  • 未设置元素等待逻辑:HackerOne页面为客户端动态渲染,调用driver.get()或点击跳转后,DOM元素不会立刻渲染完成,直接执行元素查找逻辑会返回空列表。
  • 未提取WebElement对象的文本内容:当前代码直接将WebElement对象存入列表返回,就算元素定位成功,输出的也不是你需要的URL文本。
  • 驱动生命周期逻辑错误:scanProgramme方法内执行了driver.close(),单次调用后浏览器就会被关闭,后续再次调用该方法无可用驱动实例。
  • 缺少异常捕获逻辑:若传入的项目名不存在、页面加载失败都会直接抛出异常,无法正常返回结果。

修复方案

1. 引入显式等待

使用Selenium自带的WebDriverWait配合expected_conditions,等待目标元素渲染完成后再执行提取逻辑,避免空结果。

2. 调整驱动生命周期逻辑

不要在单次查询后直接关闭浏览器,仅在所有任务执行完成后再退出驱动。

3. 补充元素文本提取逻辑

定位到<span>元素后调用.text属性提取URL文本。

4. 补充异常捕获

对超时、元素不存在等常见异常做捕获,返回可识别的错误提示。

修正后的核心代码示例

import bs4
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException

# 全局仅初始化一次驱动
driver = webdriver.Chrome()
# 全局设置最长等待时间为10秒,可根据网络情况调整
wait = WebDriverWait(driver, 10)

driver.get("https://hackerone.com/directory/programs?offers_bounties=true&asset_type=URL&order_direction=DESC&order_field=started_accepting_at")

def scanProgramme(programme):
    try:
        # 等待项目链接可点击后再执行点击操作
        programme_link = wait.until(
            EC.element_to_be_clickable((By.LINK_TEXT, programme))
        )
        programme_link.click()
        # 等待目标span元素全部加载完成
        link_elements = wait.until(
            EC.presence_of_all_elements_located((By.XPATH, '//span[@class="break-word"]'))
        )
        # 提取元素文本存入列表,而非直接返回WebElement对象
        all_links = [elem.text for elem in link_elements]
        # 退回项目列表页,方便后续调用
        driver.back()
        return all_links
    except TimeoutException:
        return ["错误:页面加载超时,未找到对应元素"]
    except NoSuchElementException:
        return ["错误:未找到指定名称的项目"]

# 所有爬虫任务执行完成后再退出驱动
# driver.quit()

补充:若调整后仍返回空结果,可在Selenium打开的浏览器窗口中手动登录HackerOne账号,部分项目的资产列表对未登录用户不可见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:09:01