为什么改变搜索关键词会打破我简单的木偶人刮刮乐?

问题描述 投票:0回答:1

程序

这是一个在NodeJS中使用的简单的Web scraper。傀儡师. 我想让它寻找"Jeep Wranglers",并以JSON格式输出结果。

IPhone X与Jeep Wrangler的比较

当我使用关键字 "IPhoneX "运行代码时,它完美地工作了!我看到了以下结果。我看到了以下结果。

URL resolved for this query: https: / https:/www.facebook.commarketplacejacksonvillesearch?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.commarketplacejacksonvillesearch?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();

谁能帮我把这个工作做好?我已经试过了所有我能想到的办法,但不知道是什么原因破坏了这一切。

谢谢你的关注。

约翰

javascript node.js dom puppeteer
1个回答
0
投票

好吧,要做的一件事就是修改你的catch,让你有一个错误参数,然后你可以把它打印出来,这将给你更多的信息,比如这样。

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

© www.soinside.com 2019 - 2024. All rights reserved.