Как в Nightmare.js указать более одного .evaluate?
В Nightmare.js хочу использовать одним запуском electron'на несколько парсеров с сохранением в разные переменные данных.
Например, зашёл на страницу, спарсил номера под div 1 сохранил в переменную 1, перешёл на другой div 2, там спарсил и также сохранил в переменную 2, перешёл на другую вкладку и т.д.
Спасибо, до мыслил вашу идею и получилось. Но это касается, если информация хранится на одной странице.
У меня некоторые нужные данные сайта лежат на разных страницах или на той же, но подгружаются динамически(( Хочу обойтись одним electon'ом, дабы ускорить работу
делайте цепочку вызовов код для понимания, можно конечно делать через расширения это будет правильнее
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });
nightmare
.goto('https://duckduckgo.com')
.type('#search_form_input_homepage', 'github nightmare')
.click('#search_button_homepage')
.wait('#r1-0 a.result__a')
.evaluate(function(){
// тут обработка все что нужно на странице
})
.then(function(data) {
// тут идем дальше
nightmare
.goto('новая ссылка '); // и так далее ....
})
.end();
каждая функция новый nightmare с нужными ссылками. Одновременный запуск не получилось сделать, т.к. все данные сохраняются в один excel файл.
Но это каждый раз открывает новое окно браузера.
Я хотел, чтобы один раз открылся браузер electron, заходил на нужные страницы и сохранял мне определенные данные в нужные переменные для дальнейшего манипулирования с данными.
Такая идея должна сократить время выполнения кода в 3 раза, грубо говоря)
Построение кода плохое, думается мне) По крайней мере с функция проще.
Хочу взять данные всех матчей с "хард" и "all". Делаю всё тоже самое, но один список с "\t \n", а другой просто берется строкой, не понимаю почему?)
А третий уровень с вложенностью по кэфам опять берётся с "\t \n".
Не понимаю логику)
var Nightmare = require('nightmare');
var nightmare = Nightmare({show: true});
nightmare
.goto('https://www.myscore.ru/match/MFrsHrWH/#h2h;3')
.evaluate(() => document.querySelector('#tab-h2h-3-surface').innerText)
.then(function (r1) {
console.log(r1);
func1();
})
.catch((error) => {
console.error('Search failed:', error);
});
function func1(){
nightmare
.wait('#h2h-all-surface')
.click('#h2h-all-surface')
.wait('#tab-h2h-all-surface')
.evaluate(() => document.querySelector('#tab-h2h-all-surface').innerText)
.then(function (r2) {
console.log(r2);
func2();
})
.catch((error) => {
console.error('Search failed:', error);
})
};
function func2() {
nightmare
.wait('#li-match-odds-comparison a')
.click('#li-match-odds-comparison a')
.wait('#block-moneyline-ft')
.evaluate(() => document.querySelector('#block-moneyline-ft').innerText)
.end()
.then(function (r3) {
console.log(r3);
var mas = r3.split('\t'); //Собирание строки в массив
var masString = mas.join('\n'); //Разбитие массива на строку из-за остатков "\n" - переходов на другую строку
mas = masString.split('\n'); //Окончательная разбивка на массив
})
.catch((error) => {
console.error('Search failed:', error);
});
};