【JavaScript】分享一个使用puppeteer木偶进行浏览器自动化抓取图片
本帖最后由 vombel 于 2022-12-6 05:15 编辑前情提要:
puppeteer是一个谷歌官方的操作chrome的nodejs API库,可以在无浏览器界面的情况下的进行拿到DOM结构、执行js代码、模拟操作,
在nodejs环境下运行
代码中的下载方式是从浏览器页面文件结构中直接拿的,能用浏览器看到就能下。
要用网络请求图片链接方式下载,请使用其他下载模块
```
const puppeteer = require("puppeteer");
const downloadFile = require("./utils/download");
async function load() {
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
await page.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36");
//这段代码抄的不解释,好用就完了 可以直从页面的文件结构中下载图片
async function getResourceContent(page, url) {
const { content, base64Encoded } = await page._client.send(
"Page.getResourceContent",
{ frameId: String(page.mainFrame()._id), url }
);
return content;
}
for (let i = 1; i < 7139012; i++) {
//爬了某网站几千张就被封了...自行寻找单页大图 url规律的网页进行访问抓取
await page.goto(`https://xxxxxxx/posts/${i}`);
let targetImg = await page.$("#image");
if (targetImg) {
const url = await page.$eval("#image", (i) => i.src);
const content = await getResourceContent(page, url);
const contentBuffer = Buffer.from(content, "base64");
fs.writeFileSync(
`./image/${Date.now()}.jpg`,
contentBuffer,
"base64"
);
console.log(`下载第${i}张`);
}
await page.waitFor(1000);
}
//等待
console.log("结束了");
browser.close();
}
load();
``` https://github.com/vombel/puppeteerDemo 把仓库丢出来{:1_926:} 感谢分享,学习学习~ 带反扒的就不好用。。puppeteer这个挺多人用的,
感谢分享,观摩观摩,学到了 liufu123 发表于 2022-12-6 09:52
带反扒的就不好用。。puppeteer这个挺多人用的,
反反爬技巧,可以通过evaluateOnNewDocument在页面加载前伪装,还有添加ua、referer,launch的args参数{:1_905:}。 vombel 发表于 2022-12-6 21:53
反反爬技巧,可以通过evaluateOnNewDocument在页面加载前伪装,还有添加ua、referer,launch的args参数{: ...
别闹了,阿里滑动都过不去,不是好自动化 好资源,感谢分享
页:
[1]