10 Star 74 Fork 24

Yogurt_cry / pyWebBrowser3

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

pyWebBrowser3

PyPI Python3.8+ .Net Framework4.7.2 Windows 10 64位

1 介绍

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 模块结构

3 开发环境

信息 说明
系统版本 Microsoft Windows 10 专业工作站 10.0.19042 64位
Python 版本 3.8.3
.Net Framework 4.7.2

4 支持版本

Python3.8+ .Net Framework4.7.2

开发环境是 Python 3.8.3,理论上应该可以支持 Python 3 所有版本。

开发环境是 Windows 10 工作站版,理论上 Windows 10 的 .NET Framework 应该是默认支持的。

5 支持系统

Windows 10 64位

调用的是 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 安装教程

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 升级教程

pip install --upgrade pyWebBrowser==3.0.5

9.3 使用示例

9.3.1 浏览器控制
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 鼠标控制
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
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 剪切板控制
import pyWebBrowser
mkc = pyWebBrowser.MKC()                              # 创建键鼠控制对象

mkc.SetClipboard(data)                                # 设置剪切板内容
mkc.GetClipboard()                                    # 获取剪切板内容
9.3.5 屏幕截图控制
import pyWebBrowser
mkc = pyWebBrowser.MKC()                              # 创建键鼠控制对象

imgBytes = mkc.Screenshot(startX, startY, endX, endY) # 任意尺寸屏幕截图, 返回 bytes

10 更多信息

其他更多信息详见项目注释以及编辑器参数提醒

MIT License Copyright (c) 2021 Yogurt_cry Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

[原仓库为pyWebBrowser,这是最新版本]基于 C# 开发的浏览器控制工具。整合提供了浏览器控制、键鼠控制、屏幕截图、剪切板控制等常用 API 展开 收起
C# 等 3 种语言
MIT
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/Yogurt_cry/pyWebBrowser3.git
git@gitee.com:Yogurt_cry/pyWebBrowser3.git
Yogurt_cry
pyWebBrowser3
pyWebBrowser3
v3.0.5

搜索帮助