【发布时间】:2018-01-29 22:54:03
【问题描述】:
我登录到一个站点,它提供了一个浏览器 cookie。
我转到一个 URL,它是一个 json 响应。
输入await page.goto('blahblahblah.json');后如何抓取页面
?
【问题讨论】:
我登录到一个站点,它提供了一个浏览器 cookie。
我转到一个 URL,它是一个 json 响应。
输入await page.goto('blahblahblah.json');后如何抓取页面
?
【问题讨论】:
另一种不提供intermittent issues 的方法是在正文可用时评估正文并将其作为 JSON 返回,例如
const puppeteer = require('puppeteer');
async function run() {
const browser = await puppeteer.launch( {
headless: false //change to true in prod!
});
const page = await browser.newPage();
await page.goto('https://raw.githubusercontent.com/GoogleChrome/puppeteer/master/package.json');
//I would leave this here as a fail safe
await page.content();
innerText = await page.evaluate(() => {
return JSON.parse(document.querySelector("body").innerText);
});
console.log("innerText now contains the JSON");
console.log(innerText);
//I will leave this as an excercise for you to
// write out to FS...
await browser.close();
};
run();
【讨论】:
你可以拦截网络响应,像这样:
const puppeteer = require('puppeteer');
const fs = require('fs');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
page.on('response', async response => {
console.log('got response', response._url)
const data = await response.buffer()
fs.writeFileSync('/tmp/response.json', data)
})
await page.goto('https://raw.githubusercontent.com/GoogleChrome/puppeteer/master/package.json', {waitUntil: 'networkidle0'})
await browser.close()
})()
【讨论】:
{waitUntil: 'networkidle0'} 似乎有帮助 - 显然可以在整个响应正文加载之前到达browser.close()。
await response.json()。