gpt4 book ai didi

javascript - Puppeteer 单击 span 元素中的链接

转载 作者:行者123 更新时间:2023-12-04 07:17:52 30 4
gpt4 key购买 nike

我正在尝试解析一个漫画网站并保存所有页面。我有代码可以运行保存图像的页面。
我在单击转到下一页的链接时遇到问题。我正在使用 Node 并使用 Puppeteer。我以为我可以只使用 document.querySelectorAll("span.next-prev-text")获取链接中的跨度。
包括用于尝试获取下一页和 html 的相关代码,我正在尝试单击 NEXT CHAPTER 链接。

<div class="col-md-6 prev-post">
<a class="" href="https://tokyorevengersmanga.com/manga/tokyo-manji-revengers-vol-1-chapter-1-reborn/">
<span class="next-prev-text">PREVIOUS CHAPTER </span>
</a>
</div>

<div class="col-md-6 next-post">
<a class="" href="https://tokyorevengersmanga.com/manga/tokyo-manji-revengers-chapter-3/">
<span class="next-prev-text">NEXT CHAPTER</span>
</a>
</div>
(async() => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();

//starting page
await page.goto(
"https://tokyorevengersmanga.com/manga/tokyo-manji-revengers-vol-1-chapter-1-reborn/"
);

console.log("page has loaded")

const chapter = await page.evaluate(() => {
const pages = Array.from(
document.querySelectorAll("img.aligncenter")
).map((image) => image.getAttribute("src"));
return pages
});

fs.writeFileSync("./data.json", JSON.stringify(chapter));
console.log("File is created!");

const nextPage = await page.evaluate(() => {
var obj = document.querySelectorAll("span.next-prev-text");
return obj[1];
})

await page.click(nextPage);
await page.waitForNavigation();
await browser.close();
} catch (error) {
console.log(error);
}

最佳答案

page.click()只需要一个字符串选择器。我不知道为什么但打电话page.click(".next-prev-text")抛出一个错误说 Error: Node is either not visible or not an HTMLElement .
解决方法是使用 page.$$()实际调用的方法 document.querySelectorAll() .它返回一个数组 ElementHandle所以你可以简单地调用 click() ElementHandle上的方法.
当您单击“下一章”链接时,我还添加了处理弹出页面的代码。
这是要测试的完整代码。

const puppeteer = require('puppeteer');
const fs = require('fs');

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

//starting page
await page.goto(
"https://tokyorevengersmanga.com/manga/tokyo-manji-revengers-vol-1-chapter-1-reborn/"
);

console.log("page has loaded")

const chapter = await page.evaluate(() => {
const pages = Array.from(
document.querySelectorAll("img.aligncenter")
).map((image) => image.getAttribute("src"));
return pages
});

fs.writeFileSync("./data.json", JSON.stringify(chapter));
console.log("File is created!");

const next = await page.$$(".next-prev-text");
const [popup] = await Promise.all([
new Promise((resolve) => page.once('popup', async p => {
await p.waitForNavigation({
waitUntil: 'networkidle0'
});
resolve(p);
})),
next[1].click()
]);

// do your job on the next page with 'popup' here

await browser.close();
} catch (error) {
console.log(error);
}
})();

关于javascript - Puppeteer 单击 span 元素中的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68689042/

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