Как исправить «$ (...). Щелчок не является функцией» в Node / Cheerio - PullRequest
1 голос
/ 19 июня 2019

Я пишу приложение в node.js, которое будет переходить на веб-сайт, нажимать кнопку на веб-сайте и затем извлекать определенные фрагменты данных с веб-сайта.Все идет хорошо, за исключением нажатия кнопки.Я не могу имитировать нажатие кнопки.Я чрезвычайно новичок в этом, поэтому я буду признателен за любые предложения, которые у вас есть!К сожалению, я искал в интернете решение этой проблемы и не смог найти его.

Я использовал .click() и .bind('click, ...) в файле .js, который использует 'request' и 'cheerio '.

Я также пытался использовать page.click() и page.evaluate() в другом файле .js, который использует' chrome-launcher ',' chrome-remote-interface 'и' puppeteer '.

Вот мой код для файла 'request' и 'cheerio':

const request = require('request');
const cheerio = require('cheerio');

let p1 = {}, p2 = {}, p3 = {}, p4 = {}, p5 = {};

p1.name = 'TheJackal666';

p2.name = 'Naether Raviel';

p3.name = 'qman37';

p4.name = 'ranger51';

p5.name = 'fernanda12x';

const team = {1: p1, 2: p2, 3: p3, 4: p4, 5: p5};

for(var x in team){
        let url = 'https://na.op.gg/summoner/userName=' + 
team[x].name;

        request(url, (error, response, html) => {
            if (!error && response.statusCode == 200) {
                const $ = cheerio.load(html);

                $('.SummonerRefreshButton.Button.SemiRound.Blue').click(); 
//FIXME: MAKE A FUNCTION THAT SUCCESSFULLY "CLICKS" UPDATE BUTTON

                team[x].overallWR = $('.winratio');
                team[x].overallWR = 
team[x].overallWR.text().match(/\d/g);
                team[x].overallWR = 
team[x].overallWR.join("");

            console.log(team[x].overallWR);
            }
        });
}

Я ожидаю успешного нажатия кнопки обновления на любой из страниц (на этой странице есть раздел, которыйговорит, когда это было последнее обновление) без получения ошибки.На самом деле, я либо получаю сообщение об ошибке:

"$(...).click is not a function"

или (если я включаю эту строку во внешнюю функцию), я не получаю ошибки, но не получаю результата.

Спасибо всемтак много для любой помощи, которую вы можете предоставить!<3 <3 <3 </p>

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

См. документацию :

Cheerio не является веб-браузером

Cheerio анализирует разметку и предоставляет API для обхода / обработки результирующей структуры данных.Он не интерпретирует результат, как веб-браузер.В частности, он не производит визуальную визуализацию, не применяет CSS, не загружает внешние ресурсы и не выполняет JavaScript.Если ваш вариант использования требует какой-либо из этих функций, вам следует рассмотреть такие проекты, как PhantomJS или JSDom.

0 голосов
/ 21 июня 2019

Cheerio - это анализатор HTML.

Cheerio можно использовать для выбора элементов dom и манипулирования ими, но это не полноценный браузер.

Cheerio имеет доступ только к исходному домену dom,это означает, что если dom веб-страницы управляется javascript, Cheerio не заметит этого изменения.

Cheerio нельзя использовать для взаимодействия с элементами dom (ala jQuery), поскольку он не выполняется аналогичным образом в окне (Окно js)

На данный момент, если вам нужно манипулировать или выбирать html, визуализированный с помощью js, ваш лучший вариант - кукловод.Это может измениться, хотя,

HTH

...