Python使用pyppeteer进行网页截图并发送机器人实例
作者:Meepoljd
这篇文章主要介绍了Python使用pyppeteer进行网页截图并发送机器人实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Pyppeteer是对Puppeteer的一个Python封装,常用在爬虫方面,最近使用它做网页巡检报告的截图,记录一下
脚本截图
使用pyppeteer其实和我们自己开浏览器的逻辑差不多,同时要结合async一起使用,首先要通过lauch函数启动一个浏览器,启动浏览器的时候可以设置启动参数,其中包括使用的代理服务器:
browser = await launch(args=["--no-sandbox", "--proxy-server=http://10.1.1.1:8443"])
启动浏览器后我们要开一个新的标签页来访问网页,goto就是用来访问对应的网页的:
page = await browser.newPage() await page.goto(url)
现在我们就开始访问对应的网页了,根据经验我们都知道有的网页刚开启的时候不是完全渲染完的,所以可以添加一个asyncio.sleep(10)
来等待十秒钟:
await asyncio.sleep(10)
如果需要运行一些js脚本语句,可以通过evaluate执行:
dimensions = await page.evaluate('''() => { return { width: document.documentElement.scrollWidth, height: document.documentElement.scrollHeight, } }''')
然后可以使用字典访问对应的数据:
dimensions['height']
接下来就是截图的操作了,甚至可以同时截成pdf,完整代码如下:
async def main(): browser = await launch(args=["--no-sandbox", "--proxy-server=http://10.1.1.1:8443"]) # 新建选项卡 page = await browser.newPage() await page.goto(url) await asyncio.sleep(10) dimensions = await page.evaluate('''() => { return { width: document.documentElement.scrollWidth, height: document.documentElement.scrollHeight, } }''') await page.setViewport({'width': 1920, 'height': dimensions['height']}) await page.screenshot({'path': "test.png", "clip": {"x": 300, "y": 10, "width": 1320, "height": dimensions['height']}}) await page.pdf({'path': file, 'width': 1920, 'height': dimensions['height']}) await browser.close()
发送到机器人
截图和pdf都生成了,现在都可以发送给企业微信机器人了
发送图片
def post_img_to_robot(page): with open(page, 'rb') as file: data = file.read() encodestr = base64.b64encode(data) image_data = str(encodestr, 'utf-8') with open(page, 'rb') as file: md = hashlib.md5() md.update(file.read()) image_md5 = md.hexdigest() data = { "msgtype": "image", "image": { "base64": image_data, "md5": image_md5 } } headers = {'content-type': 'application/json;charset=utf-8'} body = json.dumps(data) requests.post(qy_ex, data=body, headers=headers)
发送PDF
发送PDF按照教程需要先调用upload_media接口,然后在发送图片的时候把media_id作为参数传入
def post_file_to_robot(file): parsed_url = urlparse(qy_ex) param = parse_qs(parsed_url.query) webHookKey = param["key"][0] upload_url = f'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={webHookKey}&type=file' headers = { "Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36" } data = {'file': open(file, 'rb')} req = requests.post(url=upload_url, files=data, headers=headers).json() media_id = req["media_id"] data = { "msgtype": "file", "file": {"media_id": media_id} } requests.post(url=qy_ex, json=data)
发送效果如下:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。