[英]Open a link in a new tab, scrape, go to previous page
我正在使用 puppeteer 進行以下操作:
我切換await link.click(".ExCategory-results >.ExResult-row:nth-child(${i}) >.ExResult-cell >.ExHeading > a",);
對於await new.page('...')
但它說它找不到a
。
這是我正在抓取的頁面,但請注意頁面底部的加載更多按鈕。
https://www.bodybuilding.com/exercises/finder
為了防止重置加載更多按鈕,我想在新選項卡中打開每個新按鈕,刮擦,關閉選項卡和 go 到下一個名稱。
如何在新選項卡中打開每個鏈接,關閉,然后 go 到上一個選項卡?
我的代碼:
var buttonExists = true;
let allData = [];
while (buttonExists == true) {
// const loadMore = true;
const rowsCounts = await page.$$eval(
'.ExCategory-results > .ExResult-row',
(rows) => rows.length
);
console.log(`row counts = ${rowsCounts}`);
for (let i = 2; i < rowsCounts + 1; i++) {
const exerciseName = await page.$eval(
`.ExCategory-results > .ExResult-row:nth-child(${i}) > .ExResult-cell > .ExHeading > a`,
(el) => el.innerText
);
console.log(`Exercise = ${exerciseName}`);
await link.click(`.ExCategory-results > .ExResult-row:nth-child(${i}) > .ExResult-cell > .ExHeading > a`,);
await page.waitForSelector('#js-ex-content');
... fancy code here
await page.goBack();
let obj = {
exercise: exerciseName,
};
allData.push(obj);
}
// clicking load more button and waiting 1sec
try {
await page.click(LoadMoreButton);
}
catch (err) {
buttonExists = false;
}
await page.waitForTimeout(1000);
}
這個選擇器: .ExCategory-results >.ExResult-row:nth-child(${i}) >.ExResult-cell >.ExHeading > a
不必要地長,它給你的結果並不完全正確。
要獲得這些元素:
這個選擇器應該足夠了: .ExResult-row.ExHeading > a
。
然后你問:
我想在新選項卡中打開每個新選項卡、刮擦、關閉選項卡和 go 到下一個名稱。
和
如何在新選項卡中打開每個鏈接,關閉,然后 go 到上一個選項卡?
在 Puppeteer 中,您可以像這樣創建一個新頁面: await browser.newPage();
,因此您可以多次執行並將頁面存儲到數組中:
let pages = [];
pages.push(await browser.newPage());
然后你得到鏈接:
const links = await pages[0].$$eval(
'.ExResult-row .ExHeading > a',
links => links.map(l => l.getAttribute('href'))
);
最后為每個鏈接創建一個新頁面,抓取您需要的內容,然后關閉頁面:
for (let link of links) {
pages.push(await browser.newPage());
await pages[pages.length - 1].goto(`${baseUrl}/${link}`);
// your scraping
await pages[pages.length - 1].close();
}
如果您需要查找更多內容,請參閱 Puppeteer 提供的API 文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.