1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Telegram чат для обсуждения работы JS парсеров и Node.js модулей: https://t.me/a_parser_javascript
  3. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2200+ и мы растем!
    Скрыть объявление

puppeteer

Тема в разделе "Техническая поддержка по JavaScript парсерам", создана пользователем johnsmith, 26 июл 2018.

Метки:
  1. johnsmith

    johnsmith A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 мар 2013
    Сообщения:
    63
    Симпатии:
    31
    имеется такой простенький скрипт, который работает:
    Код:
    const puppeteer = require('puppeteer');
    
    (async () => {
      try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://en.wikipedia.org/wiki/Main_Page');
        const title = await page.evaluate(() => {
          const title = document.querySelector('h1');
          return title.innerText.trim();
        });
        await browser.close();
        console.log(title);
      } catch (error) {
        console.log(JSON.stringify(error));
      }
    })();
    его же аналог на a-parser отказывается работать, вываливается через try/catch, но с пустым объёктом error:
    Код:
    /* eslint require-yield: 0 */
    const puppeteer = require('puppeteer');
    
    class Parser {
      constructor() {
        this.defaultConf = {
          version: '0.1.8',
          results: {
            flat: [['title', 'HTML title']]
          },
          results_format: '$query: $title\\n',
          parsecodes: {
            200: 1
          },
          max_size: 200 * 1024
        };
      }
    
      async *parse(set, results) {
        try {
          const browser = await puppeteer.launch();
          const page = await browser.newPage();
          await page.goto('https://en.wikipedia.org/wiki/Main_Page');
          const title = await page.evaluate(() => {
            const title = document.querySelector('h1');
            return title.innerText.trim();
          });
          await browser.close();
          this.logger.put(title);
        } catch (error) {
          this.logger.put(JSON.stringify(error));
        }
        return results;
      }
    }
    падает сразу после const browser = await puppeteer.launch();
     
  2. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.731
    Симпатии:
    1.929
    Парсер не поддерживает запуск исполняемых файлов, т.е. метод launch работать не будет.
    Нужно вручную запускать браузер.
     
  3. johnsmith

    johnsmith A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 мар 2013
    Сообщения:
    63
    Симпатии:
    31
    сделал через
    Код:
        const browser = await puppeteer.connect({
          browserWSEndpoint:
           'ws://localhost:9222/devtools/browser/xxxx-xxx-xxx-xxxxx',
          ignoreHTTPSErrors: true
        });
    все параметры получил, а теперь парсер висит, буду разбираться почему

    и я так понимаю что при таком виде запуска мы лишаемся передачи прокси для puppeteer, потому что сейчас у меня сделано так:
    Код:
      const browser = await puppet.launch({
        args: [
          "--no-sandbox",
          "--disable-setuid-sandbox",
          `--proxy-server=http://${proxy}`
        ]
        // headless: false
      });
     
  4. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    3.731
    Симпатии:
    1.929
    Да, именно это пока не позволяет реализовать полную поддержку данного модуля и использовать его для массового парсинга.
     
  5. JohnS

    JohnS A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    16 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    Когда будет реализована поддержка прокси для puppeteer?
     
  6. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.310
    Симпатии:
    1.775
    если имеется ввиду одиночный прокси, как в примере выше, то прокси можно подставить при запуске Chromium:
    Код:
    --proxy-server=http://...
    
    работа с множеством прокси в рамках контекста потоков A-Parser'а пока в разработке, т.к. есть сложности, в том числе из за отсутствия поддержки со стороны Chromium
     
  7. JohnS

    JohnS A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    16 окт 2017
    Сообщения:
    7
    Симпатии:
    0
    Спасибо
     

Поделиться этой страницей