Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击Electron webview中的元素_Javascript_Node.js_Webview_Electron - Fatal编程技术网

Javascript 单击Electron webview中的元素

Javascript 单击Electron webview中的元素,javascript,node.js,webview,electron,Javascript,Node.js,Webview,Electron,我想在通过Electron中的webview加载的远程网站中多次单击某个元素(按钮) 当我在控制台中输入它时(通过inspect元素),以下工作正常: 当我在Electron主脚本中使用它时,它不会: window.webContents.executeJavaScript('a = setInterval( function(){ var elem = document.getElementsByClassName("myclass"); elem[0].click() },1000)', t

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

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

当我在Electron主脚本中使用它时,它不会:

window.webContents.executeJavaScript('a = setInterval( function(){ var elem = document.getElementsByClassName("myclass"); elem[0].click() },1000)', true);
我得到一个错误:

未捕获类型错误:无法在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');
}
当进入控制台时,在Chrome中每1秒点击一次图标

当我将我的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(元素)给出:HTMLCollection(0)

console.log(元素[0])给出:未定义


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

回答我自己的问题

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

代码:

<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>

*{边距:0;}
#浏览器谷歌{高度:100%;}
const browserView=document.getElementById('browserGoogle')
browserView.addEventListener('dom-ready',()=>{
const browser=browserView.getWebContents()
setDevToolsWebContents(devtoolsView.getWebContents())
browser.webContents.executeJavaScript('var element=document.getElementsByClassName(“gsst_a”);void 0!==element&&null!=element?(console.log(“找到了元素”),console.log(元素),console.log(元素),console.log(元素[0]),a=setInterval(函数(){document document.getElementsByClassName(“gsst_a”)[0]。click(),1e3)):console.log(“没有找到元素”);,true);
})

从这些信息中很难找到答案。您可以尝试记录“elem”和“elem[0]”并查看什么是未定义的元素吗。我想应该是“elem”,但要确定。嘿@emish89谢谢。我用编辑更新了我的问题。这意味着你的
var元素=document.getElementsByClassName('gsst_a')找不到任何元素问题是,它应该只在找到元素时执行。你能在google.com上的Chrome控制台上自己尝试一下扩展代码段吗?你把脚本放在哪里了?把它放在HTML文件的末尾。
<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>