You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python捕获本地运行的特定网页(URL)?

如何捕获特定网页而非全屏?

当然可以捕获特定网页——不管是本地运行的页面还是在线URL(比如谷歌、Stack OverFlow)。下面给两种适合新手的实现方案,你可以根据需求选择:


方案1:基于现有代码改进,定位浏览器窗口区域截图

你的现有代码是全屏截图,我们可以通过获取目标浏览器窗口的位置和尺寸,只截取对应区域,不需要大改现有逻辑。

步骤:

  • 先安装窗口定位依赖:pip install pygetwindow pywin32(Windows平台,Mac/Linux可改用pyobjc或wmctrl)
  • 修改代码,先定位浏览器窗口,再截取指定区域

修改后的代码示例:

import numpy as np
import cv2 as cv
import pyautogui
from time import time
import pygetwindow as gw

# 找到目标浏览器窗口(这里以Chrome为例,可改为你用的浏览器名称,比如"Edge")
try:
    browser_window = gw.getWindowsWithTitle("Chrome")[0]
    # 确保窗口处于前台
    browser_window.activate()
except IndexError:
    print("未找到目标浏览器窗口,请先打开网页")
    exit()

loop_time = time()

while True:
    # 获取窗口的位置和尺寸(修正窗口边框偏移,不同浏览器可能需要微调)
    x, y = browser_window.left + 8, browser_window.top + 30
    width, height = browser_window.width - 16, browser_window.height - 38

    # 只截取浏览器窗口内的区域
    screenshot = pyautogui.screenshot(region=(x, y, width, height))
    screenshot = np.array(screenshot)
    screenshot = cv.cvtColor(screenshot, cv.COLOR_BGRA2BGR)

    cv.imshow('Capture Web Page', screenshot)

    print(f'FPS { 1/(time()-loop_time):.0f}')
    loop_time = time()

    keyCode = cv.waitKey(1)
    if keyCode == 27 or keyCode == ord('q'):
        print('窗口已关闭')
        cv.destroyAllWindows()
        break

说明:

  • gw.getWindowsWithTitle("Chrome") 里的标题要匹配你的浏览器窗口标题,比如打开Stack OverFlow后,窗口标题会包含"Stack Overflow",也可以用这个关键词定位
  • 窗口的偏移值(+8、+30等)是为了去掉浏览器的标题栏和边框,不同浏览器/系统可能需要微调

方案2:用Selenium直接捕获网页(更稳定精准)

如果窗口定位容易出错,推荐用Selenium直接控制浏览器加载网页并截图,这种方法不依赖系统窗口管理,兼容性更好。

步骤:

  • 安装Selenium:pip install selenium
  • 下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配),把驱动文件放到系统PATH里或和代码同目录

代码示例:

import numpy as np
import cv2 as cv
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import time

# 配置Chrome选项,可设置窗口大小
chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")  # 设置网页显示尺寸
# 如果需要后台运行,可以添加 --headless 参数

# 启动浏览器并打开目标网页
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://stackoverflow.com")  # 替换成你要捕获的URL

loop_time = time()

while True:
    # 获取网页截图,转成OpenCV格式
    screenshot = driver.get_screenshot_as_png()
    screenshot = np.frombuffer(screenshot, np.uint8)
    screenshot = cv.imdecode(screenshot, cv.IMREAD_COLOR)

    cv.imshow('Capture Web Page', screenshot)

    print(f'FPS { 1/(time()-loop_time):.0f}')
    loop_time = time()

    keyCode = cv.waitKey(1)
    if keyCode == 27 or keyCode == ord('q'):
        print('窗口已关闭')
        driver.quit()
        cv.destroyAllWindows()
        break

说明:

  • 这种方法可以直接加载任意在线URL,也可以加载本地HTML文件(把driver.get()的参数改成file:///本地文件路径)
  • 如果需要捕获滚动后的完整网页,还可以用Selenium执行JS获取页面高度,调整窗口后再截图

内容的提问来源于stack exchange,提问作者so-me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:48:24