Python使用pyppeteer进行网页截图并发送机器人实例

 更新时间:2024年04月12日 09:45:57   作者: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)

发送效果如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用Python定时发送天气邮件

    用Python定时发送天气邮件

    大家好,本篇文章主要讲的是用Python定时发送天气邮件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • python获取字符串中的email

    python获取字符串中的email

    这篇文章主要介绍了python获取字符串中的email,通过调用re库,通过使用compile、findall获取字符串中的email,下文详细实现过程需要的小伙伴可以参考一下
    2022-03-03
  • Python Web静态服务器非堵塞模式实现方法示例

    Python Web静态服务器非堵塞模式实现方法示例

    这篇文章主要介绍了Python Web静态服务器非堵塞模式实现方法,结合实例形式分析了Python单进程非堵塞模式实现的Web静态服务器相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 使用python进行文件处理的库存管理

    使用python进行文件处理的库存管理

    库存管理是任何处理实物商品的企业的一个重要方面,Python 提供了各种库来读取和写入文件,使其成为管理库存的绝佳选择,它允许我们使用 Python 等编程语言来操作计算机文件系统上的文件,在本文中,我们将探讨如何使用文件处理在 Tkinter 中实现库存管理系统
    2023-09-09
  • torch.utils.data.DataLoader与迭代器转换操作

    torch.utils.data.DataLoader与迭代器转换操作

    这篇文章主要介绍了torch.utils.data.DataLoader与迭代器转换操作,文章内容接受非常详细,对正在学习或工作的你有一定的帮助,需要的朋友可以参考一下
    2022-02-02
  • Python Django中间件使用原理及流程分析

    Python Django中间件使用原理及流程分析

    这篇文章主要介绍了Python Django中间件使用原理及流程分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 使用Tensorflow hub完成目标检测过程详解

    使用Tensorflow hub完成目标检测过程详解

    这篇文章主要为大家介绍了使用Tensorflow hub完成目标检测过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • python中kmeans聚类实现代码

    python中kmeans聚类实现代码

    这篇文章主要为大家详细介绍了python中kmeans聚类的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python实现图像尺寸和格式转换处理的示例详解

    Python实现图像尺寸和格式转换处理的示例详解

    这篇文章主要为大家详细介绍了如何利用Python实现图像尺寸获取和格式转换处理的功能,文中的示例代码讲解详细,感兴趣的可以了解一下
    2023-04-04
  • pytorch的Backward过程用时太长问题及解决

    pytorch的Backward过程用时太长问题及解决

    这篇文章主要介绍了pytorch的Backward过程用时太长问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论