Кукольник querySelector возвращает ноль - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь удалить некоторые данные с кукловода, но для некоторых сайтов querySelector возвращает ноль, и я понятия не имею, что не так.Я нашел некоторые ответы на эту проблему в stackoverflow, но ни один из них не сработал.Вот код с примером ссылки, которая не работает.

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto('https://www.macys.com/shop/product/the-north-face-mens- 
    logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');

    const textContent = await page.evaluate(() => {
    return document.querySelector('.price');
});

console.log(textContent); 

browser.close();
})();

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

const puppeteer = require('puppeteer');

// This is where we'll put the code to get around the tests.
const preparePageForTests = async (page) => {

// Pass the User-Agent Test.
const userAgent = 'Mozilla/5.0 (X11; Linux x86_64)' +
  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36';
await page.setUserAgent(userAgent);
}


(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await preparePageForTests(page);

 // await page.setRequestInterception(true);
 await page.goto('websiteURL');

 const textContent = await page.evaluate(() => {
   return {document.querySelector('yourCSSselector').textContent,
 }
 });
  console.log(textContent);

  browser.close();
0 голосов
/ 04 июня 2018

Вероятно, элементы загружаются асинхронно через javascript и все еще не находятся в DOM, когда вы вызываете .evaluate ().

Попробуйте дождаться селектора с функцией puppeteer .waitForSelector

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

await page.goto('https://www.macys.com/shop/product/the-north-face-mens- 
logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');

await page.waitForSelector('.price');

const textContent = await page.evaluate(() => {
   return document.querySelector('.price');
});

console.log(textContent); 

browser.close();
})();
...