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

使用Puppeteer爬取Tripadvisor数据遭拦截的解决方案咨询

解决TripAdvisor Puppeteer爬取拦截问题

先修正脚本中的明显错误

你的代码存在变量名不匹配问题:定义了all_Language,但调用点击方法时用了all_Languages.click(),这会直接抛出未定义错误,先修正这个基础问题。

针对TripAdvisor反爬的核心优化方案

TripAdvisor的反爬机制会检测浏览器自动化特征、请求频率、行为模式,以下是针对性解决措施:

  • 模拟真实浏览器指纹
    启动浏览器时配置更多参数,禁用自动化标识,匹配真实Chrome环境:

    const browser = await puppeteer.launch({
      headless: false,
      executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
      args: [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-blink-features=AutomationControlled',
        '--start-maximized'
      ],
      defaultViewport: null
    });
    

    同时在页面加载前覆盖navigator.webdriver,避免被识别为自动化工具:

    await page.evaluateOnNewDocument(() => {
      Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
      });
    });
    
  • 控制操作节奏,模拟人类行为
    在页面跳转、元素点击之间添加随机延迟,避免机械性的快速操作:

    await page.goto('目标链接', { waitUntil: 'networkidle2' });
    await page.waitForTimeout(Math.floor(Math.random() * 2000) + 1000); // 1-3秒随机延迟
    
  • 复用已验证的Cookie
    手动完成Captcha验证后,导出浏览器的Cookie,在Puppeteer启动后导入,避免重复触发验证流程:

    const cookies = [/* 填入你导出的Cookie数组 */];
    await page.setCookie(...cookies);
    
  • 使用更稳定的选择器
    避免依赖动态生成的类名,改用文本内容或更固定的DOM结构定位“所有语言”选项:

    // 通过文本内容定位标签
    await page.waitForSelector('label:has(span:text("All Languages"))');
    await page.click('label:has(span:text("All Languages"))');
    

    注意:需要启用Puppeteer的选择器扩展,启动时添加args: ['--enable-features=CSSSelectorInjection'],或者用page.evaluate直接通过文本查找元素。

  • 优化代理使用策略
    轮换代理时,每个代理对应一个独立的浏览器实例,确保代理为高匿级别,避免被识别为爬虫代理;同时选择与目标站点地域匹配的代理,减少异常特征。

修正后的完整示例脚本

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-blink-features=AutomationControlled',
      '--start-maximized',
      '--enable-features=CSSSelectorInjection'
    ],
    defaultViewport: null
  });

  const page = await browser.newPage();

  // 覆盖自动化标识
  await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    });
  });

  // 导入已验证的Cookie(可选,需手动导出)
  // const cookies = [/* 你的Cookie数组 */];
  // await page.setCookie(...cookies);

  await page.goto('https://www.tripadvisor.com/Hotel_Review-g297962-d1804746-Reviews-Megasaray_Westbeach_Antalya-Antalya_Turkish_Mediterranean_Coast.html', { waitUntil: 'networkidle2' });
  
  // 随机延迟
  await page.waitForTimeout(Math.floor(Math.random() * 2000) + 1000);

  // 定位并点击“所有语言”选项
  const allLanguageLabel = await page.waitForSelector('label:has(span:text("All Languages"))');
  await allLanguageLabel.click();

  // 后续爬取逻辑...

})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:55:59