Как вы получаете все ссылки со страницы с узлом кукловода? - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь создать веб-сканер с узлом и наткнулся на пакет puppeteer, который идеально подходит для того, что я хочу.Мой конечный результат - собрать все ссылки со страницы, весь ее текстовый контент, а затем сделать снимок экрана с самой страницей.

Я запустил следующее и, похоже, собрал большое количество ссылок, однакоПри фактическом осмотре сайта есть ссылки, которые он не собирает.

const puppeteer = require('puppeteer');

module.exports = () => {
  (async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://pixabay.com/en/columbine-columbines-aquilegia-3379045/');
    await page.screenshot({ path: 'myscreenshot.png', fullPage: true });
    let text = await page.$eval('*', el => el.innerText.split(' '));
    text = text.map(string => {
      return string.replace(/[^\w\s]/gi, '');
    });

      let hrefs = await page.evaluate(() => {
          const links = Array.from(document.querySelectorAll('a'))
          return links.map(link => link.href);
      });
    console.log('done');

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

например, эта ссылка: /go/?t=image-details-shutterstock&id=699165328 нигде в массиве hrefs.Что еще хуже, это ссылки, которые ведут с сайта, именно то, что я хочу сделать, в противном случае я застреваю только при сканировании одного сайта.

По какой причине мой скрипт показывает только некоторыеиз ссылок?Является ли querySelector слишком узким или отклоняет определенные ссылки?

1 Ответ

0 голосов
/ 16 декабря 2018

То, что ссылки генерируются событием onclick, оно сохраняется в атрибуте data-go, например

<a data-go="image-details-shutterstock&amp;id=458320033">

Требуется только предварять /go/?t= и получать его

return links.map(link => link.href || link.getAttribute('data-go'));

есть также пустая ссылка для меню, например

<a><i class="icon icon_menu_user"></i></a>
...