gpt4 book ai didi

javascript - Puppeteer:打开一个页面,获取数据,返回上一页,进入新页面获取数据

转载 作者:行者123 更新时间:2023-11-30 19:37:10 25 4
gpt4 key购买 nike

从一页获取数据很简单,但是从第一页获取数据后如何返回,进入新页面,从该页面获取数据......等等。我正在网站上尝试这样做http://books.toscrape.com/ .

因此,我选择打印库存中有多少本书,因为只有输入链接才能访问它。例如,如果您运行代码,您将获得:{ stock: 'In stock (22 available)' }

现在,我想回到原来的页面,进入第二个链接,获取与上一个相同的信息。等等..

如何使用原生 JavaScript 完成此操作?

const puppeteer = require('puppeteer');

let scrape = async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();

await page.goto('http://books.toscrape.com/');
await page.click('#default > div > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.image_container > a > img');
await page.waitFor(1000);

const result = await page.evaluate(() => {
let stock = document.querySelector('#content_inner > article > table > tbody > tr:nth-child(6) > td').innerText;

return {
stock
}
});

browser.close();
return result;
};

scrape().then((value) => {
console.log(value); // Success!
});

最佳答案

说明

您需要做的是调用page.goBack()完成任务后返回一页,然后单击下一个元素。为此,您应该使用 page.$$获取可点击元素的列表并使用循环一个接一个地跨过它们。然后您可以重新运行脚本以提取下一页的相同信息。

代码

我调整了您的代码以在控制台中为下面的每个页面打印出您想要的结果。请注意,我更改了您问题中的选择器以删除 :nth-child(1) 以选择所有可点击的元素。

const puppeteer = require('puppeteer');

const elementsToClickSelector = '#default > div > div > div > div > section > div:nth-child(2) > ol > li > article > div.image_container > a > img';

let scrape = async () => {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();

await page.goto('http://books.toscrape.com/');

// get all elements to be clicked
let elementsToClick = await page.$$(elementsToClickSelector);
console.log(`Elements to click: ${elementsToClick.length}`);

for (let i = 0; i < elementsToClick.length; i++) {
// click element
elementsToClick[i].click();
await page.waitFor(1000);

// generate result for the current page
const result = await page.evaluate(() => {
let stock = document.querySelector('#content_inner > article > table > tbody > tr:nth-child(6) > td').innerText;
return { stock };
});
console.log(result); // do something with the result here...

// go back one page and repopulate the elements
await page.goBack();
elementsToClick = await page.$$(elementsToClickSelector);
}

browser.close();
};

scrape();

关于javascript - Puppeteer:打开一个页面,获取数据,返回上一页,进入新页面获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55815376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com