如何抓取点击网页按钮后触发的REST请求数据 以LeetCode竞赛代码爬取为例
解决方案
方案1:直接调用接口获取所有提交ID(效率最高)
你要找的submission id没有直接写在静态HTML里,是页面加载完成后通过接口异步拉取的排名数据里携带的:
- 打开浏览器开发者工具的「网络」面板,筛选
Fetch/XHR类型的请求,刷新排名页可以找到操作名为contestRankingData的GraphQL接口,返回的JSON数据中data.contestRankingData.submissions字段下就包含了当前页所有用户每道题对应的submission_id - 把所有ID提取出来之后,循环请求你已经找到的
https://leetcode.com/api/submissions/{submission_id}/接口,就能拿到对应代码,从返回JSON的code字段提取内容保存到本地即可
方案2:模拟浏览器操作(门槛最低,适合新手)
不需要研究接口和ID逻辑,直接用自动化模拟浏览器工具实现:
- 用Playwright或者Selenium打开目标排名页,等待页面完全渲染完成
- 定位页面上所有的文件按钮,循环模拟点击每个按钮,等待弹窗加载完成后直接提取弹窗里的代码内容
- 提取完成后关闭弹窗再点击下一个按钮,直到所有代码都提取完毕
注意事项
- 控制请求/点击频率,每次操作间隔至少1秒,避免触发力扣反爬规则被封IP
- 调用接口时建议带上你浏览器的
User-Agent和登录后的Cookie,未登录状态下的请求限制更严格,很容易返回403错误
内容的提问来源于stack exchange,提问作者RioAraki
相关产品推荐
相关产品推荐

