javascript - 使用 puppeteer 获取完整的网页源代码 html - 但总是缺少某些部分

标签 javascript web-scraping web-crawler puppeteer headless-browser

我正在尝试在以下网页上抓取特定字符串:
https://www.booking.com/hotel/nl/scandic-sanadome-nijmegen.en-gb.html?checkin=2020-09-19;checkout=2020-09-20;i_am_from=nl;
我想从这个网页源获得的信息是下面字符串中的数字序列(这是我可以在右键单击鼠标时搜索的 ->

"View Page source"): 
 name="nr_rooms_4377601_232287150_0_1_0"/ name="nr_rooms_4377601_232287150_1_1_0" 
我正在使用“puppeteer”,下面是我的代码:
const puppeteer = require('puppeteer');
(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    //await page.goto('https://example.com');
    const response = await page.goto("My-url-above");
    let bodyHTML = await page.evaluate(() => document.body.innerHTML);
    let outbodyHTML = await page.evaluate(() => document.body.outerHTML);
    console.log(await response.text());
    console.log(await page.content());
    await browser.close();
})()
但我在 response.text() 中找不到我要查找的字符串或 page.content() .
我在页面中使用了错误的方法吗?
如何在网页上转储实际的页面源,与我右键单击鼠标完全相同?

最佳答案

如果您调查这些字符串出现的位置,那么您可以在 <select> 中看到它。具有特定类 (.hprt-nos-select) 的元素:

<select
  class="hprt-nos-select"
  name="nr_rooms_4377601_232287150_0_1_0"
  data-component="hotel/new-rooms-table/select-rooms"
  data-room-id="4377601"
  data-block-id="4377601_232287150_0_1_0"
  data-is-fflex-selected="0"
  id="hprt_nos_select_4377601_232287150_0_1_0"
  aria-describedby="room_type_id_4377601 rate_price_id_4377601_232287150_0_1_0 rate_policies_id_4377601_232287150_0_1_0"
>
您将等到此元素加载到 DOM 中,然后它也将在页面源中可见:
await page.waitForSelector('.hprt-nos-select', { timeout: 0 });
但你的问题实际上在于,您访问的网址有一些额外的网址参数: ?checkin=2020-09-19;checkout=2020-09-20;i_am_from=nl; puppeteer 没有考虑到这些(您可以截取整页屏幕截图,您会看到它仍然有默认的酒店搜索表单,没有具体的酒店优惠,而不是您所期望的)。
您应该使用 puppeteer(page.click() 等)与搜索表单进行交互,以自行设置日期和原产国,以实现预期的页面内容。

关于javascript - 使用 puppeteer 获取完整的网页源代码 html - 但总是缺少某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63614065/

相关文章:

javascript - Google map 信息框中的 Bootstrap 轮播

html - BeautifulSoup - 在结果集上添加属性

python - 无法将字符串和列表从一个函数返回到另一个函数

javascript - 如何在 JavaScript 代码中获取 JavaScript 对象?

python - 在 Python 3 中从网站中查找最常用的词

javascript - 在类函数中访问 JavaScript 类变量

javascript - 如果列名是数字,d3 读取 csv/tsv 文件?

javascript - Angularjs - ng-cloak/ng-show 元素闪烁

python - 单击 'submit' 时如何获取下载的 pdf 文件,这也会将我重定向到新页面

python - 通过 BeautifulSoup 或其他基于 python 的提取器识别大量文本