La fin de PhantomJS ?

Hey @ScraperMasters,

Le créateur de PhantomJS annonce qu’il ne le maintiendra plus à jour suite à l’annonce du Headless mode de Chrome : https://groups.google.com/forum/m/#!topic/phantomjs/9aI5d-LDuNE

My GOODDDD c’est la fin des haricots là !!! Ça va être la merde pendant une petite période. Merci pour l’info je vais commencer la transition déjà (je déteste les produits Google au début, ils changent tout sans penser aux dev - ie Angular -> Angular 2)

Point positif c’est Google donc compatible avec NodeJS sur et certain :slight_smile:

J’étais en deuil toute la journée hier, quand de bon matin j’ai appris cette info … puis un rayon de soleil porteur d’espoir, j’ai nommé: PHANTOMIUM !!, Voir ici:

https://news.ycombinator.com/item?id=14101233

@boristchangang: Tiens un bout de code en nodeJS pour l’usage du headless chromium (ça me semble un peu imbuvable, enfin encore pire en C++):
https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

1 « J'aime »

Une boite avec laquelle je bosse m’en a parlé la semaine dernière, ils sont en train de migrer. D’après ce que j’ai compris, le chromium est bcp plus efficace / rapide que phantom.

Par contre, je flippe un peu d’utiliser un tool google pour scraper. Je dois été parano, mais ils m’ont tellement appris à l’être…

3 « J'aime »

Je bosse sur NightmareJS perso. C’est fait par la team de Segment.io à la base et c’est basé sur Electron (donc Chrome). C’est aussi très propre :slight_smile: Ils annoncent aussi que c’est 2 fois plus rapide que PhantomJS en effet.

Il faudrait que je fasse une série de tuto dessus quand « j’aurais le temps » car il y toujours une learning curve « sympa » sur ce genre de tool.

Vous avez déjà testé ? Un avis par rapport aux autres solutions ?

Pas d’avis car ne connaissant pas trop Nightmare, c’est difficile de comparer.

Puisque tu l’utilises, que peux-tu dire des différences vis à vis de l’aspect asynchrone très présent dans PhantomJS, et du fait qu’il soit beaucoup plus facile d’utiliser CasperJS en surcouche pour un travail par « step » pour rendre le tout séquentiel?

Est-ce qu’il y a un équivalent de Casper pour Nightmare ou bien il n’y en a pas du tout l’utilité car justement il n’y aurait pas cet aspect asynchrone?

+1 pour toi surtout quand tu vas scrapper Google avec Chromium :joy: :joy:
@ScrapingExpert Ce qui m’embête c’est que la version actuelle n’est pas stable et je me suis fait avoir tellement de foi avec Google. J’ai vraiment pas envie de commencer à apprendre un truc qu’ils vont totalement changer dans 2 semaines…
Mais bon je pense qu’on a encore quelques mois d’utilisation de phantomjs quand même.

C’est également mon problème, je n’ai pas bossé sur CasperJS ou PhantomJS donc difficile de comparer.

Ce que je peux te dire c’est qu’aujourd’hui j’ai des crawlers qui tournent et traitent chaque jour tout type de site avec des comportement complexes d’automatisation :

  • humanized scrolling (micro-scrolling random, etc)
  • humanized mouse displacements (micro-displacements random, clicks, etc)
  • form filling
  • captcha validation
  • all kind of pagination handling (with conditions to process data on the fly and avoid crawling for nothing)
  • scraping of deep systems of data (multi-levels, multi-websites, with infinite levels possibilities)
  • screenshots or elements or fullpage
  • etc

Tout ça pour te dire que :

  • NightmareJS gère très bien l’asynchrone notamment avec de libs comme co (:heart: promises) ou vo
  • Le possibilités sont clairement infinies. Je n’ai pas vu de limitations encore.
  • A savoir qu’aujourd’hui Nightmare ne fonctionne pas encore sur le mode headless de Chrome. Ce mode a été dev par Segment.io. On va voir comment ça évolue mais ça fonctionne déjà très bien comme ça.
  • N’hésite pas à regarder une exemple simple sur leur page (comparaison avec PhantomJS) : http://www.nightmarejs.org

P.S: Quand je te mets quelques types de comportements que je traite c’est surtout pour te montrer que j’ai de lourds traitements qui font appel à des aller-retour entre le script serveur et le script évalué sur la page et ça fonctionne sans sourcilier :slight_smile:

Quelques années même, n’oublions pas que les deux dernières versions datent respectivement de Janvier 2015 et Janvier 2016, ce qui n’empêche pas qu’elles fonctionnent toujours très bien même plusieurs années après :slight_smile:

A mon avis, si ça tourne encore 4-5 ans, on a le temps de voir venir.

D’accord mais tout ça on peut faire exactement la même chose avec Casper et Phantom, ma question c’était surtout comment est gérée cette histoire d’asynchronisme.

Car aujourd’hui, on a vu que le communauté autour de CasperJS était importante, avec une super doc, mais je n’ai pas la moindre idée de ce qu’est l’équivalent pour Nightmare, si jamais il y en a un. Et question doc, j’avoue avoir été assez déçu tant elle semble très light pour Nightmare…

Idem pour la doc de nightmare !

Justement, c’est ce que je voulais te montrer : on peut faire la même chose.

Pour la doc, c’est simplement cette page : GitHub - segment-boneyard/nightmare: A high-level browser automation library. à laquelle tu peux ajouter la doc d’Electron : https://electron.atom.io/docs/.

D’ailleurs, tu as vu sur un autre post que j’ai à priori su répondre à une question sur CasperJS en faisant le parallèle avec ce que j’ai sur Nightmare. La mécanique semple similaire.

Tu as une idée du type d’information qu’il te manque dans la doc ?

Quels éléments te manquent dans la doc Nightmare ?

P.S: Quand je parlais de learning curve il y a clairement un gap pour utiliser Nightmare (mais j’imagine que c’était le même avec Casper. J’ai pas aimé la doc de Casper par ex, c’est en partie pour ça que je suis parti sur Nightmare). C’est concis, simple à comprendre et si tu as des doutes, le code de Nightmare est très lisible donc tu peux facilement comprendre le système depuis le code lui même. C’est d’ailleurs comme ça que j’ai pu étendre Nightmare avec mes propres fonctionnalités.

Sans phantom ça va être la merde ! @ScrapingExpert le code que tu m’as passé c’est juste pour controler le navigateur (chrome-remote-interface) mais tu dois d’abord installer chrome et ensuite les drivers (https://sites.google.com/a/chromium.org/chromedriver/getting-started) :pensive: :disappointed_relieved: