目前越来越多的数据采集场景中,几乎都是面对的动态加载网站。传统 python 中的 requests 库在使用过程中较为复杂,尤其是对于新手来说,学习成本有点高,同时在日常的维护方面的成本较高,一旦网站的某些 Api 发生变化时,对后续的数据处理工作几乎是毁灭性的打击;而 selenium 等自动化测试工具则又非以数据采集为主业,其项目的倾向性在实际数据采集操作过程中又有一些不太方便的地方。因此结合自身的使用场景和综合考虑,进行了有针对性的开发。
开发思路上更加侧重于尽可能模拟人类的行为、更关注稳定性和可维护性,进而需要牺牲单机采集的效率(当然,也不会比 selenium 的效率低太多的)。
信息 | 说明 |
---|---|
系统版本 | Microsoft Windows 10 专业工作站 10.0.19042 64位 |
Python 版本 | 3.8.3 |
.Net Framework | 4.7.2 |
开发环境是 Python 3.8.3,理论上应该可以支持 Python 3 所有版本。
开发环境是 Windows 10 工作站版,理论上 Windows 10 的 .NET Framework 应该是默认支持的。
调用的是 Win32API 所以理论上仅支持 Windows 系统。开发环境是 Windows 10 工作站版,理论上应该可以支持 Windows 10 所有版本。
如果想要通过这个工具来进行高频次的数据采集几乎使不太可能的,该项目是为了更加友好的进行数据采集而开发的,尽可能的通过本工具模拟更符合人类操作网页的行为习惯才是本工具的设计初衷
如需提高数据采集的效率,建议使用多设备集群控制。
由于 2.0 版本本质上还是一款尝试型开发的项目,因此设计上存在较多的不合理之处。3.0 版本在开发过程中为了修复 2.0 中存在的问题,以及增加更多的功能时,无法兼顾到 2.0 的兼容问题,因此当前版本不再兼容 3.0 以下版本,如已安装 3.0 以下版本的小伙伴请及时修改,以免影响正常的采集工作。
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 # 豆瓣镜像
pip install --upgrade pyWebBrowser==3.0.5
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() # 关闭浏览器
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) # 鼠标直线平滑相对移动
根据使用频率,本项目主要提供了以下的默认按键,如有其他按键需要使用的,请使用 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'])
import pyWebBrowser
mkc = pyWebBrowser.MKC() # 创建键鼠控制对象
mkc.SetClipboard(data) # 设置剪切板内容
mkc.GetClipboard() # 获取剪切板内容
import pyWebBrowser
mkc = pyWebBrowser.MKC() # 创建键鼠控制对象
imgBytes = mkc.Screenshot(startX, startY, endX, endY) # 任意尺寸屏幕截图, 返回 bytes
其他更多信息详见项目注释以及编辑器参数提醒
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型