网页截图

try:
    print('正在截图,请稍等...')
    sleep(2)

    # 获取页面大小
    if browser.capabilities['browserName'] == 'firefox':
        page_width = browser.execute_script('return document.body.scrollWidth')
        page_height = browser.execute_script('return document.body.scrollHeight')
    else:
        page_rect = browser.execute_cdp_cmd('Page.getLayoutMetrics', {})
        page_width = page_rect['contentSize']['width']
        page_height = page_rect['contentSize']['height']

    # 截图配置
    screenshot_config = {
        'quality': 80,
        'format': 'png',
        'clip': {
            'width': page_width,
            'height': page_height,
            'x': 0,
            'y': 0,
            'scale': 1
        }}

    # 截图
    if browser.capabilities['browserName'] == 'firefox':
        result = browser.execute_script('return canvas.toDataURL("image/png");')
        with open('{}/{}.png'.format(keyword_info_item['name'], keyword), 'wb') as f:
            f.write(base64.b64decode(result.split(',')[1]))
    else:
        result = browser.execute_cdp_cmd('Page.captureScreenshot', screenshot_config)
        with open('{}/{}.png'.format(keyword_info_item['name'], keyword), 'wb') as f:
            f.write(base64.b64decode(result['data']))

    print('截图成功')
    print('===============================')
except Exception as e:
    print('截图失败')
    print(e)
    print('===============================')

# 翻页
while True:
    for i in range(10):
        if check_existence(cmd_dict[cmd_code]):
            if cmd_code == 1:
                # 百度
                browser.execute_script('document.querySelector(".n").click()')
            if cmd_code == 2:
                # 搜狗
                browser.find_element(By.ID, 'sogou_next').click()
            if cmd_code == 3:
                # 360
                browser.execute_script('document.querySelector("#snext").click()')
            if cmd_code == 4:
                # 必应
                browser.execute_script('document.querySelector(".sw_next").click()')

            sleep(cNum(3, 5))
            break
        else:
            if i == 9:
                print('已到达最后一页')
                print('===============================')
                break
            else:
                continue
    else:
        continue
    break

代码解析

  1. 获取页面大小:

    • 对于 Firefox,使用 execute_script 获取 document.body.scrollWidthdocument.body.scrollHeight 来获取页面大小。
    • 对于其他浏览器,使用 execute_cdp_cmd 执行 Page.getLayoutMetrics 获取页面大小。
  2. 截图配置:

    • quality:截图质量,取值范围为 0-100,默认值为 80。
    • format:截图格式,可以是 'png' 或 'jpeg'。
    • clip:截图区域,这里使用了 page_widthpage_height 来确保截取整个页面内容。
  3. 截图:

    • 对于 Firefox,使用 execute_script 执行 JavaScript 代码 canvas.toDataURL("image/png"); 来获取页面截图的 Base64 编码数据。
    • 对于其他浏览器,使用 execute_cdp_cmd 执行 Page.captureScreenshot 获取页面截图的 Base64 编码数据。
  4. 保存截图:

    • 使用 base64.b64decode 解码 Base64 编码数据,并将其写入到指定的 PNG 文件中。

总结

通过以上方法,您可以使用 Selenium WebDriver 在各种浏览器中进行网页截图,包括低版本浏览器和 Firefox。该方法确保了截图的完整性和可靠性,能够有效地用于网站测试和文档生成等场景。

Selenium WebDriver: 跨浏览器网页截图解决方案 (支持低版本浏览器和 Firefox)

原文地址: https://www.cveoy.top/t/topic/m2MS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录