vombel 发表于 2022-12-6 05:14

【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();




```

vombel 发表于 2022-12-6 21:54

https://github.com/vombel/puppeteerDemo   把仓库丢出来{:1_926:}

bigLeo 发表于 2022-12-6 09:51

感谢分享,学习学习~

liufu123 发表于 2022-12-6 09:52

带反扒的就不好用。。puppeteer这个挺多人用的,

GYHKL 发表于 2022-12-6 16:53


感谢分享,观摩观摩,学到了

vombel 发表于 2022-12-6 21:53

liufu123 发表于 2022-12-6 09:52
带反扒的就不好用。。puppeteer这个挺多人用的,

反反爬技巧,可以通过evaluateOnNewDocument在页面加载前伪装,还有添加ua、referer,launch的args参数{:1_905:}。

liufu123 发表于 2022-12-7 09:02

vombel 发表于 2022-12-6 21:53
反反爬技巧,可以通过evaluateOnNewDocument在页面加载前伪装,还有添加ua、referer,launch的args参数{: ...

别闹了,阿里滑动都过不去,不是好自动化

wuai4444 发表于 2022-12-9 21:55

好资源,感谢分享
页: [1]
查看完整版本: 【JavaScript】分享一个使用puppeteer木偶进行浏览器自动化抓取图片