Selecting and Clicking Elements based on class name with Nightmare.js

妖精的绣舞 提交于 2021-02-08 10:16:33

问题


im trying to select an element that's an image withing a div and then click it using nightmare.js. Below is the element im trying to click and below that the code im using.

 <div class="custom-navigator-right"><img onload="this.__gwtLastUnhandledEvent=&quot;load&quot;;" src="http://iris.generali.gr/iris/webiris/clear.cache.gif" style="width:40px;height:43px;background:url(data:image/png;base64,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) no-repeat 0px 0px;" class="gwt-Image" border="0"></div>

.evaluate(()=>{
  let divs=   document.getElementsByClassName("custom-navigator-right");
  for (var div of divs)
          div.click();
})

I'm new in nightmare.js and in web scraping thank you in advance.


回答1:


Your code should work fine, the only thing you might want to add if you want to see the browser GUI is either .then() after evaluate or put evaluate inside of .then(). Below is the code that is working and it checks all the checkboxes on the page when you run it.

var Nightmare = require('nightmare')
var nightmare = Nightmare({ show: true })
nightmare
    .goto('https://materializecss.com/checkboxes.html')
    .wait('label input[type="checkbox"]')
    .evaluate(function() {
        let checkboxes = document.querySelectorAll('label input[type="checkbox"]')
        for (let checkbox of checkboxes) checkbox.click()
    })
    .then(function() {
        console.log('Im here just to show the GUI')
    })

or

var Nightmare = require('nightmare')
var nightmare = Nightmare({ show: true })
nightmare
    .goto('https://materializecss.com/checkboxes.html')
    .wait('label input[type="checkbox"]')
    .then(function() {
        return nightmare.evaluate(function() {
            let checkboxes = document.querySelectorAll('label input[type="checkbox"]')
            for (let checkbox of checkboxes) checkbox.click()
        })
    })


来源:https://stackoverflow.com/questions/51669862/selecting-and-clicking-elements-based-on-class-name-with-nightmare-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!