【问题标题】:Puppeteer cannot goto web page to get selectorPuppeteer 无法转到网页获取选择器
【发布时间】:2020-08-24 19:35:54
【问题描述】:

问题已通过从实际浏览器添加 cookie 得到解决。

我正在尝试从这个网站https://shop.coles.com.au/a/richmond-south/specials/search/half-price-specials 获得半价产品。该网站由 AngularJS 渲染,所以我尝试使用 puppeteer 进行数据抓取。

const puppeteer = require('puppeteer');
async function getProductNames(){
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.setViewport({ width: 1000, height: 926 });
    await page.goto("https://shop.coles.com.au/a/richmond-south/specials/search/half-price-specials");
    await page.waitForSelector('.product-name')

    console.log("Begin to evaluate JS")
    var productNames = await page.evaluate(() => {
      var div = document.querySelectorAll('.product-name');
      console.log(div)
      var productnames = []
      // leave it blank for now
      return productnames
    })

    console.log(productNames)
    browser.close()
}

getProductNames();

P/S:在研究这个问题时,我发现网页实际上是 console.log 取出每个页面的数据,但我无法跟踪请求。如果你能告诉我它有多棒。

The web page console log data

【问题讨论】:

    标签: javascript node.js web-scraping web-crawler puppeteer


    【解决方案1】:

    尝试在 page.to('url'[,options]) 方法中添加 options 参数

    page.goto("https://shop.coles.com.au/a/richmond-south/specials/search/half-price-specials", { waitUntil: 'networkidle2' })
    

    只有在至少 500 毫秒内没有超过 2 个网络连接时才会认为导航完成。

    您可以在此处参考有关选项对象参数的文档:Goto Options parameter

    【讨论】:

    • 我尝试了无头假,空网页只是弹出。使用 headless true,与上面的屏幕截图相同的错误。你可以试试那个链接吗?
    • 谢谢,通过在实际浏览器中添加cookie解决了这个问题。
    猜你喜欢
    • 2018-09-10
    • 1970-01-01
    • 2021-09-25
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多