最近在研发自动化工具,需要抓取登录二维码并发送到企业微信群。
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("发送");
至此大功告成。