Nightmare.js - addEventListener点击功能不会执行

时间:2016-08-25 20:28:04

标签: javascript electron nightmare

我想弄清楚如何制作脚本点击链接并转到某个页面,然后执行一些操作。这是我坚持的例子,但是没有用。

var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });

nightmare

.goto("https://www.google.com/")
.type("input", "nightmare.js")
.wait(3000)
.click("button[type=submit]")
.wait(2000)
.evaluate(function(){
  var title = document.querySelectorAll("h3 a");
  i = 0;

  if (title) {
    title[i].addEventListener("click", function(){
      setTimeout(function(){
          alert("Success!");
        }, 5000);
    });
  }
})

.then(function(result){
    console.log("result", result);
})
.catch(function (error) {
    console.error('Search failed:', error);
});

正如您所看到的,它甚至不会进入下一页。

但是,如果我定义这样的点击,它将转到下一页,但我需要它在另一页面上执行某些功能:

.evaluate(function(){
  var title = document.querySelectorAll("h3 a");
  i = 0;

  if (title) {
    title[i].click();
  }
})

所以它让我感到困惑,不知道为什么它不会起作用。

1 个答案:

答案 0 :(得分:0)

好的,我认为主要问题在于您是如何尝试点击该链接的。现在,你是在噩梦链接回调(.goto().type().wait() ...链)的主要流程之外进行的。如果您更改流程以使用链,并再次使用.click()而不是.evaluate(),则可以在下一页上执行操作:

nightmare
.goto("https://www.google.com/")
.type("input", "nightmare.js")
.wait(3000)
.click("button[type=submit]")
.wait("h3[class=r]")
.click("h3[class=r] a")
.evaluate(function(){
  return document.querySelector("h1 a").innerHTML
})
.end()
.then(function(result){
    console.log("result", result);
})
.catch(function (error) {
    console.error('Search failed:', error);
});

这会输出内容,其中包含梦魇页面<h1></h1>标记的链接,即&#34;梦魇&#34;