影刀RPA实操指南:长页面全屏截图与滚动截图——网页截图的各种场景应对

做自动化运营的同学经常有这个需求:把整个网页截下来,生成一份完整的页面快照。

比如:

  • 竞品详情页,一次性截取所有内容方便对比
  • 自己的店铺首页,截全貌给老板看
  • 订单详情页,整个页面存证

但问题来了:大部分网页都很长,浏览器一屏显示不完。影刀自带的"截图"指令只能截当前可视区域,下面的内容怎么办?

在这里插入图片描述

这篇文章把网页截图的所有场景和方法一次讲透。

场景分类

先搞清楚你的真实需求是什么:

场景 需求 推荐方案
截取可视区域 只截看得到的 影刀内置截图指令
截取某个元素 比如商品主图 影刀元素截图指令
截取整个网页 从顶到底 浏览器全页截图
截取长图(带滚动) 比如超长表格 Selenium截图
需要高精度 用于存档或OCR Python + 截图库

方案一:影刀内置截图指令(最简单)

影刀的浏览器自动化里有两个截图指令:

在这里插入图片描述

"截图"指令:截取当前浏览器可视区域。

操作步骤:

  1. 打开目标网页
  2. 等待页面加载完成
  3. 使用"截图"指令 → 选择保存路径

拼多多店群自动化上架方案

  1. 就得到了当前屏幕能看到的区域

局限:只能截一屏。如果页面有三屏高,只截到第一屏。

在这里插入图片描述

"元素截图"指令:截取指定元素的区域。

适用场景:只想要商品主图、订单表格、图表区域等特定元素的截图。

方案二:浏览器开发者工具全页截图(零编码)

在Chrome中,这是最无损的长截图方案:

  1. 按F12打开开发者工具
  2. 按 Ctrl+Shift+P(Windows)或 Cmd+Shift+P(Mac)
  3. 输入 “screenshot” → 选择 “Capture full size screenshot”
  4. Chrome会自动滚动并拼成一张完整的页面截图,保存到下载目录

在影刀中自动化这个操作

在这里插入图片描述

影刀可以直接用"发送快捷键"模拟开发者工具的操作:

1. 打开目标网页
2. 发送快捷键:F12(打开开发者工具)
3. 等待2秒
4. 发送快捷键:Ctrl+Shift+P
5. 等待1秒
6. 模拟输入:"Capture full size screenshot"
7. 发送按键:Enter
8. 等待3秒
9. 从浏览器下载目录移动截图到目标位置

注意:这个方法依赖Chrome界面,网速慢或者电脑卡的时候,等待时间可能需要加长。

方案三:Python + Selenium实现滚动截图(精确控制)

如果你需要对截图过程有精确控制,或者需要截取比浏览器全页截图更长的内容,用Python代码。

先安装所需库

在这里插入图片描述

在影刀中执行Python代码块,需要先确保环境中有以下库:

# 在影刀的Python环境中安装(如果还没装)
# pip install selenium Pillow

完整代码:分段截图+拼接

from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image
import time
import os

def capture_full_page_screenshot(url, output_path, scroll_step=800):
    """
    分段截取网页并拼接成长图
    
    url: 目标网页地址
    output_path: 输出图片路径
    scroll_step: 每次滚动的像素高度(默认800)
    """
    driver = webdriver.Chrome()
    driver.get(url)
    time.sleep(3)  # 等待页面加载
    
    # 获取页面总高度
    total_height = driver.execute_script("return document.body.scrollHeight")
    viewport_height = driver.execute_script("return window.innerHeight")
    
    screenshots = []
    current_position = 0
    
    while current_position < total_height:
        # 滚动到指定位置
        driver.execute_script(f"window.scrollTo(0, {current_position})")
        time.sleep(0.5)  # 等待渲染
        
        # 截图
        screenshot_path = f"screenshot_part_{current_position}.png"
        driver.save_screenshot(screenshot_path)
        screenshots.append(screenshot_path)
        
        current_position += scroll_step
    
    # 拼接所有截图
    images = [Image.open(p) for p in screenshots]
    
    # 计算总宽度和总高度(处理重叠部分)
    total_width = max(img.width for img in images)
    total_height_canvas = sum(img.height for img in images) - (len(images) - 1) * (scroll_step - viewport_height)
    
    result = Image.new('RGB', (total_width, int(total_height_canvas)))
    
    y_offset = 0
    for i, img in enumerate(images):
        if i == len(images) - 1:
            # 最后一张只取从重叠点到底部的部分
            overlap = scroll_step - (viewport_height if i > 0 else 0)
            crop_top = max(0, img.height - (total_height - current_position + scroll_step))
            result.paste(img.crop((0, crop_top, img.width, img.height)), (0, y_offset))
        else:
            result.paste(img, (0, y_offset))
            y_offset += scroll_step
    
    result.save(output_path)
    
    # 清理临时文件
    for p in screenshots:
        os.remove(p)
    
    driver.quit()
    return output_path

# 调用示例
capture_full_page_screenshot(
    "https://example.com/product/12345",
    r"D:\screenshots\product_full.png"
)

这段代码的核心逻辑:把页面从上到下分成多段,每段截一张图,然后像拼拼图一样把截到的图片拼接起来。

注意事项

在这里插入图片描述

滚动步长:step太大 → 可能漏掉内容;step太小 → 截图太多、拼接慢。一般设置为浏览器窗口高度的80%左右。

异步加载:有些网页内容是随着滚动动态加载的(比如微博、抖音的"无限滚动")。这种页面需要先滚动到底部触发所有内容加载,再分段截图。

固定元素:很多网页顶部有固定导航栏、底部有固定客服按钮。分段截图时这些元素会出现在每一张截图中,导致拼接后导航栏和客服按钮出现多次。可以通过CSS隐藏它们:

driver.execute_script("""
    var fixed = document.querySelectorAll('.fixed-header, .fixed-footer, .sticky, .float-bar');
    fixed.forEach(function(el) { el.style.display = 'none'; });
""")

方案四:影刀调用浏览器自带的截图API

Chrome DevTools Protocol(CDP)提供了 Page.captureScreenshot 方法,可以截取完整页面。

在这里插入图片描述

在影刀中,如果你用的是影刀内置浏览器,可以尝试在流程中加入JavaScript代码块:

TEMU店群如何管理运营?

// 这个方案依赖浏览器是否支持CDP,测试环境可能不可用
// 如果不行就用方案三

这个方法比较不稳定,不同版本的影刀浏览器支持情况不同,推荐优先使用方案三

截图后的常见处理

添加水印

在这里插入图片描述

截图存证时通常需要加水印:

from PIL import Image, ImageDraw, ImageFont

def add_watermark(image_path, text, output_path):
    img = Image.open(image_path)
    draw = ImageDraw.Draw(img)
    
    # 在右下角添加半透明文字
    font = ImageFont.truetype("simhei.ttf", 30)
    text_width = draw.textlength(text, font=font)
    x = img.width - text_width - 50
    y = img.height - 80
    
    draw.text((x, y), text, font=font, fill=(255, 255, 255, 128))
    img.save(output_path)

压缩图片

长截图文件往往很大(几MB甚至十几MB),发送前可以压缩:

img.save(output_path, quality=60, optimize=True)

写在最后

在这里插入图片描述

网页截图看似简单,实际上场景差异很大。记住三个选型原则:

  • 简单快照 → 影刀内置截图指令就够了
  • 长页面 → Chrome全页截图或Selenium分段拼接
  • 需要处理、加水印 → Python + PIL方案

大部分RPA自动化场景里用的是第二个方案:Chrome全页截图。它零编码、质量高、速度快。只有在需要精确定制(比如去掉导航栏、加水印)时,才上Python方案。


内容标签:影刀RPA · 网页截图 · 长图拼接 · Selenium · 页面快照 · 数据存证

作者:林焱

在这里插入图片描述

系列说明:本文是「影刀RPA新手到高手」系列教程之一,面向需要制作页面快照的运营和开发者。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐