Почему изменение ключевого слова поиска ломает мой простой скребок Puppeteer? - PullRequest
0 голосов
/ 30 апреля 2020

Программа

Это простой веб-скребок в NodeJS, использующий Кукольник . Я хочу, чтобы он искал " Jeep Wranglers " и выводил результаты в JSON.

IPhone X против Jeep Wrangler

Когда я запускаю код используя ключевое слово "IPhoneX", он работает отлично! Мне представлены следующие результаты:

URL, разрешенный для этого запроса:
https://www.facebook.com/marketplace/jacksonville/search/?query=IPhone%20X


[
  {
    itemTitle: 'iPhone X (64gb) Unlocked',
    itemPrice: null,
    itemURL: 'https://facebook.com//marketplace/item/660933184466809/',
    itemImg: 'https://scontent-mia3-2.xx.fbcdn.net/v/t1.0-0/c0.2.261.261a/p261x260/95204129_555831935070812_4787210156310003712_o.jpg?_nc_cat=109&_nc_sid=843cd7&_nc_oc=AQlwXNEAvJyUsehdWQc3Sazu8yPFLt4-UenwazHfKoUHQgFk2Y0IMxFLNVOM9Ufkixk&_nc_ht=scontent-mia3-2.xx&oh=73a71c8d46087a03222be9d8ccec20e2&oe=5ED06145'
  },
  {
    itemTitle: 'iPhone Xs 64gb Unlocked Space Gray',
    itemPrice: null,
    itemURL: 'https://facebook.com//marketplace/item/235068041103141/',
    itemImg: 'https://scontent-mia3-2.xx.fbcdn.net/v/t1.0-0/c0.29.261.261a/p261x260/94617759_1443663249148648_6414747198054989824_o.jpg?_nc_cat=105&_nc_sid=843cd7&_nc_oc=AQmCvaqKMfBLRiJGlN4xzNc5M8ppYEuLQDYZ6-FQalHWfPb0Wh1VMdyPzFmiHLbEyZI&_nc_ht=scontent-mia3-2.xx&oh=854a856849d7323229b1b5b927245811&oe=5ECE0F49'
  }
]

но .. Когда я изменяю ключевое слово на «Jeep Wrangler», что является результатом, который мне нужен, мне предоставляется следующий ...

URL-адрес, разрешенный для этого запроса:
https://www.facebook.com/marketplace/jacksonville/search/?query=jeep%20wrangler

Selector error.
undefined

Я потратил много времени, пытаясь понять это, но безуспешно.

Источник

const puppeteer = require('puppeteer');

const getItems = async searchTerm => {
    //{headless: false, defaultViewport: null} --> put this in launch() method below as parameter for developtment purposes --> opens up browser window
    const browser = await puppeteer.launch({headless: false, defaultViewport: null});
    const page = await browser.newPage();

    await page.goto(`https://facebook.com/marketplace/search/?query=${encodeURI(searchTerm)}`);

    const itemList = await page.waitForSelector('div > div > span > div > a[tabindex="0"]')
    .then(() => page.evaluate(() => {
        const itemArray = [];
        const itemNodeList = document.querySelectorAll('div > div > span > div > a[tabindex="0"]');

        itemNodeList.forEach(item => {
            const itemTitle = item.querySelector('div > div > span > div > a > div > div > div > span > div > span > div[class="l9j0dhe7 stjgntxs ni8dbmo4"').innerText;
            const itemPrice = item.querySelector('div > div > span > div > a > div > div > div > div > span[class="oi732d6d ik7dh3pa d2edcug0 qv66sw1b c1et5uql a8c37x1j s89635nw ew0dbk1b a5q79mjw g1cxx5fr lrazzd5p oo9gr5id"').innerText;
            const itemURL = `https://facebook.com/${item.getAttribute('href')}`;
            const itemImg = item.querySelector('div > div > span > div > a > div > div > div > div > div > div > img').getAttribute('src');

            itemArray.push({itemTitle, itemPrice, itemURL, itemImg});
        });
        return itemArray;
    }))
    .catch(() => console.log("Selector error."));

    return itemList;

}

const initScraper = async() => {
    const items = await getItems('jeep wrangler');
    console.log(items);
}

initScraper();

Может Кто-нибудь помочь мне заставить это работать? Я перепробовал все, что мог придумать, и понятия не имею, что его нарушает.

Спасибо, что посмотрели.

Джон

1 Ответ

0 голосов
/ 30 апреля 2020

Что ж, нужно сделать так, чтобы ваш улов был изменен таким образом, чтобы у вас был параметр ошибки, а затем вы могли распечатать его, что даст вам больше информации, например:

.catch((err) => console.log("Selector error: "+err));

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