gpt4 book ai didi

javascript - 单击Electron Webview中的元素

转载 作者:行者123 更新时间:2023-12-03 12:26:31 24 4
gpt4 key购买 nike

我想在通过Electron的webview加载的远程网站中多次单击一个元素(按钮)。

当我在控制台中输入它时(通过inspect元素),以下工作:

a = setInterval( function(){
var elem = document.getElementsByClassName("myclass");
elem[0].click()
},1000)

当我在Electron主脚本中使用它时,它不是:
window.webContents.executeJavaScript('a = setInterval( function(){ var elem = document.getElementsByClassName("myclass"); elem[0].click() },1000)', true);

我收到一个错误:

未捕获的TypeError:无法读取未定义的属性“click”:1:110

我也尝试了预加载在webview标签中的scipt,但是没有运气。

我想念的是什么,还是做错了?
chromiumVersion: "58.0.3029.110"
electronVersion: "1.7.9"
nodeVersion:"7.9.0"

编辑

使用Google.com和搜索栏中的语音图标进行测试:
var element =  document.getElementsByClassName('gsst_a');
if (typeof(element) != 'undefined' && element != null) {
console.log('yep, element is found');
console.log(element);
console.log(element[0]);
a = setInterval(
function(){
var elem = document.getElementsByClassName("gsst_a");
elem[0].click()
},1000)
} else {
console.log('nope, element is not found');
}

在控制台中输入后,这会每1秒钟在Chrome中点击一次图标。

当我将Webview设置为Google.com并具有以下行时,它仍会找到元素,但再次给出前面提到的错误:
window.webContents.executeJavaScript('var element=document.getElementsByClassName("gsst_a");void 0!==element&&null!=element?(console.log("yep, element is found"),console.log(element),console.log(element[0]),a=setInterval(function(){document.getElementsByClassName("gsst_a")[0].click()},1e3)):console.log("nope, element is not found");', true);

console.log(element)给出:HTMLCollection(0)

console.log(element [0])提供:未定义

为什么我可以在普通浏览器中输入js,但不能在Electron Webview中输入js?

最佳答案

回答我自己的问题。

该事件指的是BrowserWindow中的网页,而不是其中的webview。因此,该元素在我正在查找的范围中不存在,因此我需要在BrowserWindow中执行类似的操作。

代码:

<html>
<head>
<style type="text/css">
* { margin: 0; }
#browserGoogle { height: 100%; }
</style>
</head>
<body>
<webview id="browserGoogle" src="https://google.com"></webview>
<script>
const browserView = document.getElementById('browserGoogle')
browserView.addEventListener('dom-ready', () => {
const browser = browserView.getWebContents()
browser.setDevToolsWebContents(devtoolsView.getWebContents())
browser.webContents.executeJavaScript('var element=document.getElementsByClassName("gsst_a");void 0!==element&&null!=element?(console.log("yep, element is found"),console.log(element),console.log(element[0]),a=setInterval(function(){document.getElementsByClassName("gsst_a")[0].click()},1e3)):console.log("nope, element is not found");', true);
})
</script>
</body>
</html>

关于javascript - 单击Electron Webview中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com