【发布时间】:2022-12-03 10:59:18
【问题描述】:
我正在尝试创建一个可以从网站捕获 src 属性的函数。但是所有最常见的方法都不起作用。
这是我最初的尝试。
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
try {
await page.setDefaultNavigationTimeout(0);
await page.waitForTimeout(500);
await page.goto(
`https://www.sirved.com/restaurant/essex-ontario-canada/dairy-freez/1/menus/3413654`,
{
waitUntil: "domcontentloaded",
}
);
const fetchImgSrc = await page.evaluate(() => {
const img = document.querySelectorAll(
"#menus > div.tab-content >div > div > div.swiper-wrapper > div.swiper-slide > img"
);
let src = [];
for (let i = 0; i < img.length; i++) {
src.push(img[i].getAttribute("src"));
}
return src;
});
console.log(fetchImgSrc);
} catch (err) {
console.log(err);
}
await browser.close();
})();
[];
在我的下一次尝试中,我尝试了一个建议并返回了一个空字符串。
await page.setViewport({ width: 1024, height: 768 });
const imgs = await page.$$eval("#menus img", (images) =>
images.map((i) => i.src)
);
console.log(imgs);
在我最后的尝试中,我接受了另一个建议,并返回了一个包含两个空字符串的数组。
const fetchImgSrc = await page.evaluate(() => {
const img = document.querySelectorAll(".swiper-lazy-loaded");
let src = [];
for (let i = 0; i < img.length; i++) {
src.push(img[i].getAttribute("src"));
}
return src;
});
console.log(fetchImgSrc);
在每次尝试中,我只替换了代码的函数和控制台日志部分。我做了很多挖掘,发现这些是使用 puppeteer 删除图像 src 的最常见方法,我已经以其他方式使用它们,但出于某种原因,它们现在对我不起作用。我不确定我的代码中是否有错误或为什么它不起作用。
【问题讨论】:
-
你能分享页面的网址吗
-
它确实返回了第一个元素的来源,你能告诉我们你到底想做什么吗,这样我们就可以相应地编码
-
我正在尝试返回此页面上两个菜单图像的 src 链接。但是在我的代码中我没有得到任何回报
-
嗨@EverettDeLeon,你能试试我的答案吗,让我知道它是否适合你4
标签: node.js image web-scraping puppeteer