Как я могу щелкнуть по элементу / фильтру вкладки HTML с помощью кукловода? - PullRequest
0 голосов
/ 02 июля 2019

Я создаю веб-приложение для просмотра веб-сайтов, которое использует заголовки вкладок для фильтрации информации, отображаемой в таблице. Мне нужно выбрать определенный фильтр перед извлечением данных из таблицы, но мне не повезло, щелкнув по элементу вкладки, в то время как я могу нажать на кнопку.

В этом приложении я использую кукловодов и cheerio, и я успешно перешел на соответствующую страницу и нажал кнопку перед извлечением данных, но заголовок вкладки, похоже, не реагирует так же, хотя для этого также требуется человек. пользователь, чтобы выбрать его.

Это фрагмент моего кода:

const page = await browser.newPage();
await page.goto('https://na.op.gg/summoner/champions/userName=' + 'TheJackal666');

const html = await page.content();
const $ = cheerio.load(html);

//This is the troublesome line
await page.click('#SummonerLayoutContent > div.tabItem.Content.SummonerLayoutContent.summonerLayout-champions > div > div > div.Content.tabItems > div.tabItem.season-13 > div > div.stats-filter > div > div:nth-child(2)');
//The scraping function follows

Я ожидаю, что при выполнении остальной части моей функции очистки будут получены результаты, согласующиеся с информацией, которая отображается, когда активен заголовок вкладки «Ранжированное соло». Вместо этого он в настоящее время не может активировать этот селектор и очищает данные, которые отображаются, когда активен заголовок вкладки «Всего» по умолчанию.

Большое спасибо за любые предложения, которые у вас есть <3! </p>

1 Ответ

0 голосов
/ 02 июля 2019

в настоящее время не удается активировать этот селектор

Целевой сайт кажется довольно тяжелым, поэтому дайте ему время для загрузки и выполнения сценариев:

await page.goto('https://na.op.gg/summoner/champions/userName=TheJackal666', { waitUntil : "domcontentloaded" });

const selector = "#SummonerLayoutContent > div.tabItem.Content.SummonerLayoutContent.summonerLayout-champions > div > div > div.Content.tabItems > div.tabItem.season-13 > div > div.stats-filter > div > div:nth-child(2)";

// Wait fo the tab selector to be present
await page.waitFor(selector);

await page.click(selector);

Также вы не используете имя пользователя, как если бы оно было переменной, а не строкой:

await page.goto('https://na.op.gg/summoner/champions/userName=' + TheJackal666);

Если он не определен ранее, это приведет к ошибке.

Наконец, при разработке таких сценариев рассмотрите сначала использование режима заголовка (с видимым браузером Chromium):

const browser = await puppeteer.launch({ headless: false});

Это поможет вам лучше понять, что происходит во время чистки.

...