Парсинг веб-сайта через Puppeteer возвращает undefined - PullRequest
0 голосов
/ 17 июня 2020

Я пытался очистить веб-сайт Myntra. Ссылка здесь

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

Error: Evaluation failed: TypeError: Cannot read property 'textContent' of null
at __puppeteer_evaluation_script__:2:55

Функция возвращает пустой объект. Я прикрепил свой код ниже.

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.myntra.com/jeans/only/only-women-black-skinny-fit-mid-rise-low-distress-stretchable-cropped-jeans/10973332/buy');
    const body = await page.evaluate( () => {
     return document.querySelector('.pdp-price') ;
    });
    console.log(body);

    await browser.close();
  } catch (error) {
    console.log(error);
  }
})();

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Кажется, что этот сайт блокирует запросы, для которых HeadlessChrome указано в user-agent, поэтому я изменил user-agent, и теперь все работает так, как вам нужно. Попробуйте этот код:

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setExtraHTTPHeaders({
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
    });
    await page.goto('https://www.myntra.com/jeans/only/only-women-black-skinny-fit-mid-rise-low-distress-stretchable-cropped-jeans/10973332/buy');
    const body = await page.evaluate(() => {
        return document.querySelector('.pdp-price').textContent;
    });
    console.log(body);
    await browser.close();
  } catch (error) {
    console.log(error);
  }
})();
0 голосов
/ 17 июня 2020

Что-то пытается позвонить .textContent тому, что null. Я не вижу этого в вашем примере, но вот что произойдет, если такой код, как querySelector('.pdp-price'), ничего не найдет - может быть, потому что страница еще не полностью загружена или селектор ничего не соответствует.

Вы можете передать другие параметры для page.goto, чтобы заставить его ждать дольше, что может позволить загрузке вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...