NODEJS抓取网页的图片并推送到企业微信群

2023-12-26 12:06:27 浏览数 (2)

最近在研发自动化工具,需要抓取登录二维码并发送到企业微信群。

1 第一关,找图。

nodeJs 通过selenium下操纵火狐浏览器下载图片,中间发现二维码竟然是在框架中的,抓取了好久都没成功。

代码语言:javascript复制
 await driver.get("https://channels.weixin.qq.com/login.html");
    //await driver.switchTo().frame(By.xpath("/html/body/div[1]/div[3]/div/div/div[1]/div[1]/div/div/div[2]/div/iframe"));
    var iframe = driver.findElement(By.className("display"));
    driver.switchTo().frame(iframe);

    let ele = await driver.wait(until.elementLocated(By.xpath('/html/body/div[1]/div/div[1]/div/div[1]/img')),10000);
    let foo = await ele.getAttribute("src");

2 第二关,取图

图片是存放在src中的base64格式,但是前面加了一点东西,data:image/png;base64,iVBORw0

data:image/png;base64,是不能要的

取到的图是BASE64格式,因为企微群推送图片还要计算原图片的MD5,需要再转换一次,再计算md5码。

代码语言:javascript复制
let base64Data = foo.split(';base64,'); 
    let type = base64Data[0].split('data:')[1]; 
    base64Data = base64Data[1];
    const dataBuffer = new Buffer(base64Data, 'base64'); //把base64码转成buffer对象,

    const hash = crypto.createHash('md5');
    // 可任意多次调用update():
    hash.update(dataBuffer);
    var md5string=hash.digest('hex');

3 推送企微

代码语言:javascript复制
var postdata={
      "msgtype": "image",
      "image": {
          "base64": base64Data,
          "md5": md5string
      }
   }

  
   await  axios.post('https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的KEY',postdata)
      .then(function (response) {
        console.log(response.data);
      })
      .catch(function (error) {
        console.log(error);
      });
     console.log("发送");

至此大功告成。

0 人点赞