Chrome 如何管理Puppeteer网页抓取中的会话数据

2lpgd968  于 2022-12-06  发布在  Go
关注(0)|答案(1)|浏览(152)

我试图从这个网站immobilienscout24.de使用puppeteer报废数据。我认为这是需要保持会话数据导航网站上的不同页面。以下是我的代码有时一些页面没有加载,并检测到我的请求作为机器人请求。
请看到的代码,并帮助我与会话管理时,网页抓取使用 puppet 。

const puppeteer = require('puppeteer-extra')
const storage = require('node-persist');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
const cheerio = require('cheerio')
const pretty = require("pretty");

puppeteer.launch({
    headless: false,
    args: ["--disable-setuid-sandbox"],
    'ignoreHTTPSErrors': true,
    executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    userDataDir: '/Users/username/Library/Application Support/Google/Chrome/Default'
}).then(async browser => {
    const page = await browser.newPage()
    const baseURL = 'https://www.immobilienscout24.de'

    for(var p=1; p <= 10;  p++) {

     
    await page.goto("https://www.immobilienscout24.de/Suche/de/neubauwohnung-mieten?pagenumber="+p,{
      waitUntil: "load"
    })

    const client = await page.target().createCDPSession();
    const cookies = (await client.send('Network.getAllCookies')).cookies;

    await page.setCookie(...cookies);
    const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage))

    const html = await page.content();
    const $ = cheerio.load(html);

    const tiles = $('.result-list__listing');

    

    tiles.map( async (i, item)   =>  {
      let link = $(item).find('a.result-list-entry__brand-title-container').attr('href');

      if (link.includes("expose")) {
        link = baseURL+link
      }
      console.log(link)
  });
    await page.waitForTimeout(10000)
    }
    await browser.close()

})
bq9c1y66

bq9c1y661#

因为使用的是传统循环,所以您同时发出10个请求:

for(var p=1; p <= 10;  p++)

因此,该网站适当地有一些像速率限制,以防止DDoS攻击,这就是为什么你被检测为机器人。
使用ES6,您可以请求10次,但顺序如下:

for (let p of [...Array(10).keys()] ){
    // execute your request here
}

希望它有所帮助!

相关问题