Node.js Headless Web Scraping с Webdriver.io + Selenium

Мне нужно использовать безголовый Selenium в Node.js для очистки. Я попробовал Webdriver.io, он работал с безголовым Selenium. Но когда я запускаю безголовый Selenium, он вообще не работает. Вот код (такой же, как на примере webdriver.io)

webdriverio
  .remote(options)
  .init()
  .url('http://www.google.com')
  .getTitle().then(function(title) {
  console.log('Title was: ' + title);
})
  .end();

Как заставить его работать с безголовым Selenium? Или есть какая-то альтернатива?


person CherryBelle    schedule 16.09.2016    source источник


Ответы (2)


Вы должны настроить селен в безголовой среде. Попробуйте xvfb — это безголовый графический интерфейс для Firefox.

$ apt-get install fvfb -y
$ DISPLAY=:1 xvfb-run java -Dwebdriver.gecko.driver=./geckodriver -jar selenium-server-standalone-3.0.1.jar
person Kasheftin    schedule 27.01.2017

В прошлом я делал много парсинга с различными библиотеками, и если вам не нужно выполнять вход или манипулировать страницей, я рекомендую вам использовать request и cheerio для обработки парсинга. Это позволяет вам очищать содержимое с помощью фильтрации в стиле jQuery. Он также позволяет выполнять очистку без какой-либо зависимости от чего-либо еще, такого как Selenium или PhantomJS.

Быстрый пример:

request('http://www.google.com', (err, response, body) => {
    if(err) console.error(err);
    const $ = cheerio.load(body);

    const title = $('title').text();
    console.log(`Title was: ${title}`);
    // Or scrape whatever you want from the page
});

Если вам нужно выполнить вход в систему, обработку форм или выполнение каких-либо действий на странице перед ее очисткой, вы можете попробовать любое количество библиотек. Я использовал Zombie.js с достойными результатами и попробовал несколько других, таких как Selenium Nightmare (использует PhantomJS), PhantomJS и другие.

В конце концов, Request и Cheerio упростили быструю очистку страницы.

person Ding    schedule 16.09.2016
comment
Я знаю cheerio и раньше использовал его вместе с запросом. Проблема с запросом заключается в том, что иногда он не возвращает HTML, как мы видим в браузере, поэтому невозможно проанализировать HTML с помощью cheerio. Например, для этой страницы indotrading.com/companycatalog/. Мне нужно только найти способ получить HTML-код, а затем загрузить его с помощью cheerio. - person CherryBelle; 16.09.2016
comment
Извините, похоже, вы пытаетесь очистить некоторые динамические сайты. но я ненавидел зависимость от PhantomJS. Zombie.js превратился в фреймворк для тестирования браузеров, но я использовал его много раз в прошлом, потому что он не зависел от другого инструментария. - person Ding; 16.09.2016
comment
между прочим, у кошмара.js больше нет зависимости от phantomjs (удалено около года назад). теперь он полностью работает на электроне. - person reinpk; 19.01.2017