# pyWebBrowser3 **Repository Path**: Yogurt_cry/pyWebBrowser3 ## Basic Information - **Project Name**: pyWebBrowser3 - **Description**: [原仓库为pyWebBrowser,这是最新版本]基于 C# 开发的浏览器控制工具。整合提供了浏览器控制、键鼠控制、屏幕截图、剪切板控制等常用 API - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: v3.0.5 - **Homepage**: https://pypi.org/project/pyWebBrowser/ - **GVP Project**: No ## Statistics - **Stars**: 90 - **Forks**: 29 - **Created**: 2021-06-24 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: utils **Tags**: Spider, Python, Csharp, 数据采集 ## README # pyWebBrowser3 [![PyPI](https://img.shields.io/pypi/v/pyWebBrowser?label=pyWebBrowser)](https://pypi.org/project/pyWebBrowser/) ![Python3.8+](https://img.shields.io/badge/Python-3.8%2B-blue) ![.Net Framework4.7.2](https://img.shields.io/badge/.NET%20Framework-4.7.2-blue) ![Windows 10 64位](https://img.shields.io/badge/Windows-10_64位-blue) ### 1 介绍 ![](main.png) #### 1.1 立项原因   目前越来越多的数据采集场景中,几乎都是面对的动态加载网站。传统 python 中的 requests 库在使用过程中较为复杂,尤其是对于新手来说,学习成本有点高,同时在日常的维护方面的成本较高,一旦网站的某些 Api 发生变化时,对后续的数据处理工作几乎是毁灭性的打击;而 selenium 等自动化测试工具则又非以数据采集为主业,其项目的倾向性在实际数据采集操作过程中又有一些不太方便的地方。因此结合自身的使用场景和综合考虑,进行了有针对性的开发。   开发思路上更加侧重于尽可能模拟人类的行为、更关注稳定性和可维护性,进而需要牺牲单机采集的效率(当然,也不会比 selenium 的效率低太多的)。 #### 1.2 解决问题 - 通过 Cef 的方式使用嵌入 Chromium 内核,使用正常的浏览器身份进入网站,避免伪造浏览器的行为被网站监控 - 通过调用 Win32 的键盘、鼠标、剪切板、屏幕截图等 Api 接口,模拟更接近人类行为使用浏览网站的方式,进行更友好的进行数据采集 #### 1.3 运用技术 ##### 1.3.1 核心部分 - cef.redist.x64 - cef.redist.x86 - CefSharp.Common - CefSharp.WinForms ##### 1.3.2 辅助部分 - Win32 关于键盘、鼠标、剪切板、屏幕截图、全局钩子等系统 API ### 2 模块结构 ![](module.png) ### 3 开发环境 | 信息 | 说明 | | -------------- | -------------------------------------------------- | | 系统版本 | Microsoft Windows 10 专业工作站 10.0.19042 64位 | | Python 版本 | 3.8.3 | | .Net Framework | 4.7.2 | ### 4 支持版本 ![Python3.8+](https://img.shields.io/badge/Python-3.8%2B-blue) ![.Net Framework4.7.2](https://img.shields.io/badge/.NET%20Framework-4.7.2-blue) > 开发环境是 Python 3.8.3,理论上应该可以支持 Python 3 所有版本。 > 开发环境是 Windows 10 工作站版,理论上 Windows 10 的 .NET Framework 应该是默认支持的。 ### 5 支持系统 ![Windows 10 64位](https://img.shields.io/badge/Windows-10_64位-blue) > 调用的是 Win32API 所以理论上仅支持 Windows 系统。开发环境是 Windows 10 工作站版,理论上应该可以支持 Windows 10 所有版本。 ### 6 特点 - 通过嵌入 Chromium 内核,尽可能避免了网站对 WebDriver 的检测 - 数据采集时无需安装 Chrome 浏览器,无需担心 Chrome 版本自动更新导致的 ChromeDriver 无法使用 - 整合人类对 Windows 常用操作行为,通过调用系统 API 对键鼠、剪切板、屏幕截图等对网页进行操作,尽可能降低网站对数据采集行为的识别敏感度 ### 7 缺陷   如果想要通过这个工具来进行高频次的数据采集几乎使不太可能的,该项目是为了更加友好的进行数据采集而开发的,尽可能的通过本工具模拟更符合人类操作网页的行为习惯才是本工具的设计初衷   如需提高数据采集的效率,建议使用多设备集群控制。 ### 8 兼容问题 由于 2.0 版本本质上还是一款尝试型开发的项目,因此设计上存在较多的不合理之处。3.0 版本在开发过程中为了修复 2.0 中存在的问题,以及增加更多的功能时,无法兼顾到 2.0 的兼容问题,因此**当前版本不再兼容 3.0 以下版本**,如已安装 3.0 以下版本的小伙伴请及时修改,以免影响正常的采集工作。 ### 9 如何使用 #### 9.1 安装教程 ```shell pip install pyWebBrowser==3.0.5 # 经过实测, 中科大和豆瓣的镜像源的速度更快一点, 因此也可以使用以下命令 pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ pyWebBrowser==3.0.5 # 中科大镜像 pip install -i http://pypi.douban.com/simple/ pyWebBrowser==3.0.5 # 豆瓣镜像 ``` #### 9.2 升级教程 ```shell pip install --upgrade pyWebBrowser==3.0.5 ``` #### 9.3 使用示例 ##### 9.3.1 浏览器控制 ```python import pyWebBrowser browser = pyWebBrowser.Browser() # 创建浏览器对象 mkc = pyWebBrowser.MKC() # 创建键鼠控制对象 browser.Create(width, height, topMost) # 创建浏览器 x, y, width, height = browser.Location() # 获取浏览器位置 browser.Open(url) # 打开或跳转网页 browser.Reflesh() # 刷新当期页面 url = browser.Url() # 获取当前网页路径 browser.Download(downloadUrl, filePath, timeout) # 下载文件 frameCount = browser.FrameCount() # 获取当前页面 iFrame 数量 htmlElement = browser.Html() # 获取当前页面源代码 state = browser.WaitByElement(xpath, timeout) # 等待指定元素加载 elementLocList = browser.ElementLocation(xpath) # 获取所有符合指定 xpath 语句的元素位置 browser.ExecJS(query) # 执行 JavaScript 语句, 没有返回值时 jsResult = browser.ExecJS(query) # 执行 JavaScript 语句, 有返回值时 browser.ElementTouch(mkc, xpath) # 执行鼠标移动到指定元素位置 browser.InputData(mkc, xpath, data, mode) # 执行鼠标移动到指定元素位置并输入内容 browser.Close() # 关闭浏览器 ``` ##### 9.3.2 鼠标控制 ```python import pyWebBrowser mkc = pyWebBrowser.MKC() # 创建键鼠控制对象 mkc.LeftDown() # 鼠标左键按下 mkc.LeftUp() # 鼠标左键抬起 mkc.LeftClick() # 鼠标左键单击 mkc.RightDown() # 鼠标右键按下 mkc.RightUp() # 鼠标右键抬起 mkc.RightClick() # 鼠标右键单击 mkc.MiddleDown() # 鼠标中键按下 mkc.MiddleUp() # 鼠标中键抬起 mkc.MiddleClick() # 鼠标中键单击 mkc.Move(x, y) # 鼠标移动 x, y = mkc.Postion() # 获取当前鼠标坐标 mkc.SmoothMove(endX, endY, startX, startY) # 鼠标直线平滑移动 mkc.RelativeMove(endX, endY) # 鼠标直线平滑相对移动 ``` ##### 9.3.3 键盘控制 根据使用频率,本项目主要提供了以下的默认按键,如有其他按键需要使用的,请使用 ASCII 码对照表在执行参数中直接输入 value 的键值。 | 按键 | 说明 | 按键 | 说明 | 按键 | 说明 | | :--------: | :--------: | :--: | :----: | :--: | :----: | | TAB | 切换键 | 0 | Num 0 | J | 大写 J | | ENTER | 回车键 | 1 | Num 1 | K | 大写 K | | SHIFT | 上档转换键 | 2 | Num 2 | L | 大写 L | | CTRL | 控制键 | 3 | Num 3 | M | 大写 M | | ALT | 改变键 | 4 | Num 4 | N | 大写 N | | CAPSLOCK | 大写锁定键 | 5 | Num 5 | O | 大写 O | | ESC | 取消键 | 6 | Num 6 | P | 大写 P | | SPACEBAR | 空格键 | 7 | Num 7 | Q | 大写 Q | | PAGEUP | 上翻页 | 8 | Num 8 | R | 大写 R | | PAGEDOWN | 下翻页 | 9 | Num 9 | S | 大写 S | | END | 行尾定位 | A | 大写 A | T | 大写 T | | HOME | 行首定位 | B | 大写 B | U | 大写 U | | LEFTARROW | 左箭头 | C | 大写 C | V | 大写 V | | UPARROW | 上箭头 | D | 大写 D | W | 大写 W | | RIGHTARROW | 右箭头 | E | 大写 E | X | 大写 X | | DOWNARROW | 下箭头 | F | 大写 F | Y | 大写 Y | | INSERT | 改写键 | G | 大写 G | Z | 大写 Z | | DELETE | 删除键 | H | 大写 H | | | | NUMLOCK | 数字锁定键 | I | 大写 I | | | ```python import pyWebBrowser mkc = pyWebBrowser.MKC() # 创建键鼠控制对象 mkc.KeyDown([keyName], [keyValue]) # 键盘按键按下, 可输入按键, 或输入键值 mkc.KeyUp([keyName], [keyValue]) # 键盘按键抬起, 可输入按键, 或输入键值 mkc.KeyPress([keyName], [keyValue]) # 键盘按键单击, 可输入按键, 或输入键值 mkc.KeyCombination([keyNameList], [keyValueList]) # 键盘执行组合键, 可输入按键列表, 或输入键值列表 # 组合键示例 - 打开任务管理器 mkc.KeyCombination(['ctrl', 'shift', 'esc']) ``` ##### 9.3.4 剪切板控制 ```python import pyWebBrowser mkc = pyWebBrowser.MKC() # 创建键鼠控制对象 mkc.SetClipboard(data) # 设置剪切板内容 mkc.GetClipboard() # 获取剪切板内容 ``` ##### 9.3.5 屏幕截图控制 ```python import pyWebBrowser mkc = pyWebBrowser.MKC() # 创建键鼠控制对象 imgBytes = mkc.Screenshot(startX, startY, endX, endY) # 任意尺寸屏幕截图, 返回 bytes ``` ### 10 更多信息 其他更多信息详见项目注释以及编辑器参数提醒