Функции и веб-соскоб с Puppeteer - PullRequest
0 голосов
/ 17 апреля 2020

Цель состоит в том, чтобы открыть страницу html, ввести URL-адрес с сайта booking.com, нажать кнопку и вернуть возвращенное в консоль название отеля, рейтинг и т. Д. c.

Пока что ничего не возвращает при нажатии на кнопку. Он работает, когда URL-адрес жестко запрограммирован, но в этой форме говорится, что «main объявлен, но значение никогда не читается». Я вызываю функцию неправильно? Я все еще новичок в кукловоде, может быть, я что-то пропускаю?

Вот приложение. js

function main()
{
    var Url = document.getElementById('inputUrl').value

    const puppeteer = require('puppeteer');

    let bookingUrl = Url;
    (async () => {
        const browser = await puppeteer.launch({ headless: true });
        const page = await browser.newPage();
        await page.goto(bookingUrl);

        // get hotel details
        let hotelData = await page.evaluate(() => {
            let hotels = [];
            // get the hotel elements
            let hotelsElms = document.querySelectorAll('div.sr_property_block[data-hotelid]');
            // get the hotel data
            hotelsElms.forEach((hotelelement) => {
                let hotelJson = {};
                try {
                        hotelJson.name = hotelelement.querySelector('span.sr-hotel__name').innerText;
                        hotelJson.reviews = hotelelement.querySelector('div.bui-review-score__text').innerText;
                        hotelJson.rating = hotelelement.querySelector('div.bui-review-score__badge').innerText;
                        if(hotelelement.querySelector('div.bui-price-display__value.prco-inline-block-maker-helper'))
                        {
                            hotelJson.price = hotelelement.querySelector('div.bui-price-display__value.prco-inline-block-maker-helper').innerText;
                        }
                        hotelJson.imgUrl = hotelelement.querySelector('img.hotel_image').attributes.src.textContent;
                    }
                    catch (exception){

                    }
                hotels.push(hotelJson);
            });
            return hotels;
        });
        console.dir(hotelData);
    })();
}

Вот индекс. html

<!DOCTYPE html>

 <html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="app.js" type="text/javascript"></script> 
        <title></title>
        <meta name="description" content="">
        <link rel="stylesheet" href="">
    </head>

    <input id = "inputUrl" type="text" placeholder = "type url here"/>
    <button id = "button" button onclick="main();"> click</button>

    <body>

        <script src="" async defer></script>
    </body>
</html>

1 Ответ

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

Вы можете добавить это до оценки:

await page.waitForSelector('div.sr_property_block[data-hotelid]');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...