今天写了一个python(基于pyside2)的自动登陆小程序,利用QWebEngineView内嵌网页实现的。主要解决了下面一些技术问题:
1、QWebEngineView内嵌网页。
利用QWebEnginePage对象的runJavaScript就可实现。
# 初始化一个page
self.webview = QWebEngineView(self)
self.page = QWebEnginePage()
self.webview.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) # 支持视频播放
self.page.windowCloseRequested.connect(self.on_windowCloseRequested) # 页面关闭请求
self.page.profile().downloadRequested.connect(self.on_downloadRequested) # 页面下载请求
# ------------监听 加载内容url
self.t = WebEngineUrlRequestInterceptor()
self.page.setUrl(QUrl("https://www.baidu.com"))
self.webview.setPage(self.page)
self.page.profile().setUrlRequestInterceptor(self.t)
self.webview.loadProgress.connect(self.processLoad)
self.frmWebview.setStyleSheet("border-top:1px solid #ccc;"
"border-bottom:1px solid #ccc;border-left:1px solid #ccc")
self.webview.show()
2、如何和python桌面程序交互。
利用QWebEnginePage对象的runJavaScript就可实现。比如找到CSDN网站登陆按钮:
self.page.runJavaScript("""
var hrefArr = document.getElementsByTagName('a'); //获取这个页面的所有A标签
for( var i=0; i<hrefArr.length; i++ ){
html = hrefArr[i].innerHTML;
if (html == '账号密码登录'){
hrefArr[i].click();
break;
}
}
...
另外还碰到了如何循环等待登陆框的出现,如何模拟键盘设置input框的值,如何动态施加按钮的单击事件等问题。
最后的效果如下:
双击左边的项目,即可自动登陆CSDN,程序仅为演示,代码中要改成自己的CSDN账号。登陆后的效果:
操作演示视频:
CSDN自动登陆脚本
需要源码的粉丝可以联系我QQ: 395702361