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

从Chrome复制的Glassdoor请求Curl在终端触发人机验证问题排查

解决Glassdoor爬取下一页请求的人机验证问题

核心原因

Glassdoor的反爬机制会严格校验请求的会话完整性和请求头真实性,直接复制的Curl请求缺少动态生成的会话Cookie、关键请求头,或者没有模拟正常浏览行为,所以会触发人机验证。

具体解决步骤

  • 完整复制请求头与Cookie
    从浏览器开发者工具的Network面板找到下一页的fetch请求,右键复制为Copy as cURL (bash),确保保留所有关键请求头:

    • 必须包含与浏览器完全一致的User-Agent、当前页面的Referer、异步请求标识X-Requested-With: XMLHttpRequest,以及Accept、Accept-Language。
    • 确保Cookie参数-b里包含JSESSIONID、gdId、csrfToken、glassdoor_cookie_consent这些动态会话字段——复制前要保证浏览器已正常加载Glassdoor页面,甚至手动完成一次初始验证。
  • 动态提取关键参数
    下一页请求里的csrfToken、pageNumber等参数不能硬编码:

    • csrfToken通常在页面的<meta name="csrf-token">标签或Cookie中,爬取第一页时先提取该值,后续请求复用。
    • pageNumber按递增逻辑生成,比如从1开始每次加1。
  • 模拟人类浏览行为

    • 每次请求后加入1-3秒的随机延迟(Python中用time.sleep(random.uniform(1,3))),避免高频请求。
    • 不要一次性请求超过10页,分批次爬取,中间可暂停几分钟。
  • 修复官方API的Cookie提示
    API请求需在请求头里手动带上完整Cookie字符串,包括glassdoor_cookie_consent=yes(表示同意Cookie政策)及会话相关字段,确保请求头的Cookie参数与浏览器完全一致。

示例:Python Requests实现

import requests
import random
import time

# 从浏览器复制的完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Referer': 'https://www.glassdoor.com/Job/python-jobs-SRCH_KO0,6.htm?Autocomplete=',
    'X-Requested-With': 'XMLHttpRequest',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    # 补充其他从浏览器复制的必要请求头
}

# 从浏览器复制的完整Cookie
cookies = {
    'JSESSIONID': 'xxxxxx',
    'gdId': 'xxxxxx',
    'csrfToken': 'xxxxxx',
    'glassdoor_cookie_consent': 'yes',
    # 补充其他Cookie字段
}

# 下一页的API接口(从fetch请求复制)
base_url = 'https://www.glassdoor.com/graphql'

# 模拟爬取前3页
for page in range(1, 4):
    # 构造请求参数(从fetch的Payload复制,修改pageNumber)
    payload = {
        'query': 'xxxxxx', # 从浏览器复制的GraphQL查询语句
        'variables': {
            'pageNumber': page,
            # 保持其他变量与浏览器一致
        }
    }
    
    response = requests.post(base_url, headers=headers, cookies=cookies, json=payload)
    
    if response.status_code == 200:
        data = response.json()
        print(f"第{page}页数据获取成功")
        # 这里添加数据处理逻辑
    else:
        print(f"第{page}页请求失败,状态码:{response.status_code}")
    
    # 随机延迟
    time.sleep(random.uniform(1.5, 3))

注意事项

  • Cookie有效期很短,每次爬取前需重新从浏览器复制最新Cookie。
  • 若仍触发人机验证,可更换IP(如使用代理),或手动在浏览器完成一次验证后再复制Cookie。
  • 遵守Glassdoor的Robots协议与使用条款,避免过度爬取导致账号封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:43:09