早期版本的 QtWebkit github 上有 Cisco 的 automation 开源项目(https://github.com/cisco-open-source/qtwebdriver)。Qt 后来采用的 QtWebEngine 我搜了很多英文网页也没有成熟框架。只有通过其他方法曲线解决了。
1、记住鼠标点位(电脑屏幕取点工具),用 pyautogui 去点击。
2、分析网络协议。使用工具 ecapture,可以方便地分析 https 的流量 ,只能在 linux 下运行。
3、在加载的页面里,打开调试窗口,输入JavaScript 代码。
4、图像识别,paddleOCR 识别文字效果很好,再结合 opencv 检测文本框。
鉴于第 3 点靠谱一点,贴一部分代码吧:
// 断点调试
debugger;
document.getElementById("demo").innerHTML = x;
// 模拟浏览器的鼠标点击事件
<script>
const btn = document.getElementById('demo_click');
btn.onclick = function () { //
alert('click complete!');
};
simulateClick();
// 2. 模拟 浏览器的鼠标点击事件
// 2.1 可以触发 onclick 事件(先触发)
// 2.2 可以触发 addEventListener 事件(后触发)
// 2.3 jQuery 的事件绑定底层就是 addEventListener ,
function simulateClick() { // 模拟 浏览器的鼠标点击事件
const event = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true
});
btn.dispatchEvent(event);
}
</script>
// 判断元素存在
if(document.theForm.periodPerMonth)
{ //存在 }
// 等待几秒
setTimeout(() => console.log(1), 1000)
setTimeout(() => console.log(2), 1000)
setTimeout(() => console.log(3), 1000)
for (let i = 0; i <= 3; i++) {
setTimeout(() => console.log(`#${i}`), 1000)
}
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
const repeatedGreetings = async () => {
await sleep(1000)
console.log(1)
await sleep(1000)
console.log(2)
await sleep(1000)
console.log(3)
}
repeatedGreetings()
// 模拟右键
var obj= document.getElementById('userid');
obj.oncontextmenu= function(event){ alert('测试而已!')}
var obj = document.getElementById('userid');
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('contextmenu',true,true,window,1,12,345,7,220,false,false,false,false,0,null);
obj.dispatchEvent(evObj);
// 模拟双击
var targLink = document.getElementById ("something");
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('dblclick', true, true);
targLink.dispatchEvent (clickEvent);
// 保存文件到本地:FileSaver.js 原理 https://juejin.cn/post/6901790184841412622