如何避免Puppeteer被反爬

思路

避免Puppeteer的浏览器特征被检测
即去掉 “webdriver” in navigator 特征

方法1

    await page.setUserAgent(
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5")
    await page.evaluateOnNewDocument('() =>{ Object.defineProperties(navigator,'
                                      '{ webdriver:{ get: () => false } }) }')
    await page.goto('http://abc.com/')

方法2

	await page.goto('http://abc.com/')
    await page.evaluate("""
     () =>{
     Object.defineProperties(navigator,{
     webdriver:{
     get: () => false
     }
     })
     }
     """)

方法3

    browser = await launch({'headless': True, 'args': [
        '--disable-extensions',
        '--hide-scrollbars',
        '--disable-bundled-ppapi-flash',
        '--mute-audio',
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-gpu',
        '--disable-web-security',
        '--disable-infobars',

    ],
      'ignoreDefaultArgs': ["--enable-automation"], #反爬
                            'devtools': True,
                            'dumpio': True, })
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对该网站的反爬机制,可以采取以下几种方式来解决: 1. 使用Puppeteer的headless模式:该模式下,Puppeteer会启动一个无头浏览器,对于网站来说,就像是一个真实的用户在浏览网页,可以规避一些反爬机制。 2. 设置延迟时间:在爬取每个页面之前,设置一个随机的延迟时间,模拟人类浏览网页的行为。这样可以防止因为请求频繁而被封IP。 3. 使用代理IP:通过购买代理IP,可以将请求转发到不同的IP地址,规避反爬机制的封锁。 4. 修改HTTP请求头部信息:通过修改HTTP请求头部信息,可以伪装成浏览器的请求,防止被网站识别为爬虫程序。 对于如何下载每个页面并将其保存为.md文件,可以使用Node.js的文件系统模块fs来实现。具体实现方法如下: ```javascript const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 访问目标网站 await page.goto('https://www.mql5.com/zh/articles/mt5/page24'); // 获取页面总数 const pageCount = await page.$eval('.pagination__pages', el => { return parseInt(el.innerText.split(' ')[1]); }); // 循环遍历每个页面 for(let i = 1; i <= pageCount; i++) { // 访问当前页面 await page.goto(`https://www.mql5.com/zh/articles/mt5/page${i}`); // 获取页面标题和内容 const title = await page.$eval('h1', el => el.innerText); const content = await page.$eval('.article-text', el => el.innerText); // 将内容保存为.md文件 fs.writeFile(`${title}.md`, content, (err) => { if (err) throw err; console.log(`${title}.md has been saved!`); }); // 等待一段时间后进入下一个页面 await page.waitFor(Math.floor(Math.random() * 5000) + 1000); } await browser.close(); })(); ``` 以上代码使用Puppeteer访问目标网站,并获取总页面数。然后使用循环来遍历每个页面,访问页面并获取标题和内容。最后将内容保存为.md文件,并通过设置随机延迟时间来规避反爬机制的封锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值