单击Electron webview中的元素

时间:2018-01-03 21:07:27

标签: javascript node.js webview electron

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

当我在控制台中输入以下内容时(通过检查元素):

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:无法读取属性'点击'未定义时间: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秒点击一次图标。

当我将我的网页视图设置为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(element [0])给出: undefined

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。

该事件指的是BrowserWindow中的网页,而不是其中的网页视图。因此,该元素并不存在于我正在查看的范围内,我需要在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>