2018-12-26 23:04:56 +08:00
|
|
|
|
# QWebView
|
|
|
|
|
|
2019-03-12 12:47:56 +08:00
|
|
|
|
- 目录
|
2019-05-22 10:49:55 +08:00
|
|
|
|
- [梦幻树](#1梦幻树)
|
|
|
|
|
- [获取Cookie](#2获取Cookie)
|
|
|
|
|
- [和Js交互操作](#3和Js交互操作)
|
2019-07-08 15:43:01 +08:00
|
|
|
|
- [网页整体截图](#4网页整体截图)
|
2019-09-18 14:01:58 +08:00
|
|
|
|
- [播放Flash](#5播放Flash)
|
2019-09-24 16:17:05 +08:00
|
|
|
|
- [拦截请求](#6拦截请求)
|
2019-03-12 12:47:56 +08:00
|
|
|
|
|
2018-12-26 23:04:56 +08:00
|
|
|
|
## 1、梦幻树
|
|
|
|
|
[运行 DreamTree.py](DreamTree.py)
|
2019-02-01 23:41:22 +08:00
|
|
|
|
|
2018-12-26 23:04:56 +08:00
|
|
|
|
在桌面上显示透明html效果,使用`QWebkit`加载html实现,采用窗口背景透明和穿透方式
|
|
|
|
|
|
|
|
|
|
![DreamTree](ScreenShot/DreamTree.png)
|
|
|
|
|
|
|
|
|
|
## 2、获取Cookie
|
|
|
|
|
[运行 GetCookie.py](GetCookie.py)
|
|
|
|
|
|
|
|
|
|
从`page()`中得到`QNetworkAccessManager`,在从中得到`QNetworkCookieJar`,
|
|
|
|
|
最后得到cookie,当然也可以设置自己的`QNetworkCookieJar`
|
|
|
|
|
|
2019-05-22 10:45:15 +08:00
|
|
|
|
![GetCookie](ScreenShot/GetCookie.png)
|
|
|
|
|
|
|
|
|
|
## 3、和Js交互操作
|
|
|
|
|
[运行 JsSignals.py](JsSignals.py)
|
|
|
|
|
|
|
|
|
|
通过`QWebFrame`的`addToJavaScriptWindowObject`函数提供进行Python对象和Javascript的交互
|
|
|
|
|
|
|
|
|
|
具体看代码中的注释
|
|
|
|
|
|
2019-07-08 15:43:01 +08:00
|
|
|
|
![JsSignals](ScreenShot/JsSignals.gif)
|
|
|
|
|
|
|
|
|
|
## 4、网页整体截图
|
|
|
|
|
[运行 ScreenShotPage.py](ScreenShotPage.py)
|
|
|
|
|
|
2019-07-09 14:47:09 +08:00
|
|
|
|
1. 方式1:原理是通过`QWebView.QWebPage.QWebFrame`得到内容的高度,然后设置`QWebPage.setViewportSize`的大小,
|
2019-07-08 15:43:01 +08:00
|
|
|
|
最后通过`QWebFrame.render`把图片截出来
|
2019-07-09 14:47:09 +08:00
|
|
|
|
2. 方式2:通过js库`html2canvas`对指定元素截图,得到`base64`编码的数据并调用接口函数传递到py代码中
|
2019-07-08 15:43:01 +08:00
|
|
|
|
|
2019-09-18 13:32:22 +08:00
|
|
|
|
![ScreenShotPage](ScreenShot/ScreenShotPage.gif)
|
|
|
|
|
|
|
|
|
|
## 5、播放Flash
|
|
|
|
|
[运行 PlayFlash.py](PlayFlash.py)
|
|
|
|
|
|
|
|
|
|
1. 重点在于设置 `os.environ['QTWEBKIT_PLUGIN_PATH'] = os.path.abspath('Data')` ,非常重要,设置为NPSWF32.dll文件所在目录
|
|
|
|
|
2. 其次是xp下ssl问题,具体参考代码
|
|
|
|
|
|
2019-09-24 16:17:05 +08:00
|
|
|
|
![PlayFlash](ScreenShot/PlayFlash.gif)
|
|
|
|
|
|
|
|
|
|
## 6、拦截请求
|
|
|
|
|
[运行 BlockRequest.py](BlockRequest.py)
|
|
|
|
|
|
|
|
|
|
通过`QNetworkAccessManager`中的`createRequest`方法对每个请求做拦截过滤
|
|
|
|
|
|
2019-09-24 16:19:10 +08:00
|
|
|
|
![BlockRequest](ScreenShot/BlockRequest.png)
|