2017-01-31 2 views
0

Я пытаюсь использовать кошмар, в узле js, чтобы щелкнуть ссылки, основанные на тексте внутри якорного текста ссылки.nightmare.js пытается щелкнуть ссылку на основе текста привязки

Вот пример кода:

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

    nightmare 
    .goto('https://www.wikipedia.org/') 
    .inject('js', 'C:/users/myname/desktop/nodejs/node_modules/jquery/dist/jquery.js') 
    .wait(500) 
var selector = 'a'; 
nightmare 
    .evaluate(function (selector) { 
    // now we're executing inside the browser scope. 
    return document.querySelector(selector).innerText; 
    }, selector) // <-- that's how you pass parameters from Node scope to browser scope 
    .end() 
    .then(function(result) { 
    console.log(result) 
    }) 

Я действительно непонятно, почему внутренний текст всех тегов не возвращаются? Я думал, что мог бы сделать оператор if в методе .evalution, так что он ограничил бы ссылку на клик на «английский», например.

Любая идея как нажимать на ссылки на основе текста ссылки?

ответ

0

Насколько я знаю, нет способа выбрать элемент DOM исключительно на том, что он содержит. Вам нужно будет либо выбрать все якоря (например, вы сейчас делаете), и отфильтровать их на основе innerText, а затем сразу же щелкнуть события события, или вы можете ввести jQuery и использовать :contains и $.click() для выпуска клика.

Также, если вы хотите все текста из тегов, вы, вероятно, захотите использовать document.querySelectorAll().

В качестве примера, чтобы получить весь текст:

.evaluate(function (selector) { 
    return document.querySelectorAll(selector) 
    .map(element => element.innerText); 
}, selector) 
Смежные вопросы