PhantomJS est-il mort ? Détecter les navigateurs headless PhantomJS
Développé pour la première fois par Ariya Hidayat en 2011, PhantomJS est l’un des premiers navigateurs headless populaires. Il fournit une API JavaScript (JS) pratique pour interagir avec les sites web – cliquer sur des boutons, remplir des formulaires – sans avoir à lancer un navigateur réel, et utilise QtWebkit pour le backend. Et bien que PhantomJS ait été utilisé à des fins de test, il a également servi à créer des bots malveillants.
PhantomJS a cessé d’être maintenu en 2018, ce qui a coïncidé avec la sortie de Headless Chrome par Google. À sa sortie, Headless Chrome était presque au même niveau que Chrome vanilla/headful et prenait en charge la quasi-totalité des mêmes fonctionnalités avancées.
Parce que Headless Chrome était si efficace, la plupart des développeurs de bots ont migré vers son utilisation, surtout lorsque Google a également publié Puppeteer, un framework d’automatisation de haut niveau pour automatiser (Headless) Chrome.
PhantomJS est-il encore populaire ?
Malgré la popularité de Puppeteer et de Headless Chrome, nous nous sommes demandé si PhantomJS était encore utilisé par les développeurs de bots après presque cinq ans. Pour le découvrir, nous avons utilisé quelques signatures pour identifier le trafic lié à PhantomJS, en exploitant à la fois des signaux côté serveur et côté client.
Côté serveur, nous recherchons des user-agents contenant une sous-chaîne PhantomJS, telle que Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1.
Côté client, nous identifions la présence de window.callPhantom et window._phantom.
Pour détecter un PhantomJS potentiellement modifié (tout en étant relativement sûr qu’il s’agit de PhantomJS et non d’un autre framework de bots comme Selenium, par exemple), nous vérifions également :
- la présence de plugins—que PhantomJS n’a pas—dans navigator.plugins ;
- si navigator.language = C (comme dans le langage de programmation) ;
- si le fournisseur du navigateur (navigator.vendor) est “Apple Computer, Inc.”
Ainsi, même si PhantomJS modifiait son user agent et supprimait également window.callPhantom et window._phantom, nous pouvons toujours être relativement certains que l’empreinte est liée à un PhantomJS modifié.
Bien sûr, les bots peuvent également mentir sur leurs attributs. Ils peuvent toujours essayer d’utiliser JavaScript pour supprimer la présence d’attributs clés ou falsifier l’empreinte habituelle de PhantomJS, par exemple navigator.language = C, ou l’absence de navigator.plugins. Mais ici, l’idée est d’avoir une idée approximative de si PhantomJS est encore activement utilisé par les développeurs de bots dans la nature.
Notez que nos tests JS capturent également d’autres frameworks de bots comme SlimerJS – qui est similaire à PhantomJS, mais basé sur Gecko, un moteur de navigateur développé par Mozilla pour le navigateur Firefox.
Le graphique ci-dessous montre le nombre de requêtes PhantomJS par heure sur une période d’une semaine. En moyenne, nous observons ~15K requêtes provenant de bots basés sur PhantomJS par heure.

La plupart des bots PhantomJS que nous observons opèrent sur des sites web où seule notre détection est activée, mais où notre protection n’est pas activée (c’est généralement le cas pour les sites utilisant l’essai gratuit de DataDome).
En plus des essais gratuits, les sites sans protection incluent des clients qui n’ont pas activé la protection sur des points de terminaison spécifiques, ou qui préfèrent gérer la protection eux-mêmes en utilisant leur propre logique, par exemple en montrant de fausses données aux scrapers.
En particulier, le pic de trafic PhantomJS que nous avons observé les 5 et 6 janvier s’est produit sur un site utilisant DataDome pour enrichir leurs données anti-fraude en mode non filtrant.
Que font les bots PhantomJS ?
La majorité des bots PhantomJS sont utilisés pour mener des attaques de scraping. En dehors du scraping, la plupart des bots PhantomJS sont soit liés au trafic interne des clients (utilisés à des fins de test) soit à des bots vérifiés/commerciaux utilisés pour collecter des informations et vérifier les annonces.
En moyenne, une fois que nous avons exclu les bons bots et le trafic interne, nous observons ~15K requêtes de bots PhantomJS malveillants par heure. Bien que cela puisse être surprenant, des fournisseurs de proxy populaires comme Brightdata publient encore des articles de blog sur PhantomJS.
Quelle est la popularité de PhantomJS par rapport à Puppeteer Extra Stealth ?
Lorsque nous avons étudié Puppeteer Extra Stealth, une version modifiée de Puppeteer qui change son empreinte pour éviter les techniques traditionnelles de détection des bots, nous avons détecté en moyenne 650K requêtes toutes les trois heures, soit ~215K requêtes/heure.
Ainsi, en ce qui concerne les mauvais bots, nous observons environ 15 fois plus de requêtes de bots Puppeteer Extra Stealth que de requêtes de bots PhantomJS.

Conclusion
PhantomJS a été l’un des premiers navigateurs headless populaires et grand public, mais il a cessé d’être maintenu après la sortie de Headless Chrome et Puppeteer en 2018. Malgré cela, nous voyons encore PhantomJS dans la nature. Il est généralement utilisé en interne par les entreprises pour effectuer des tests, ainsi que par quelques bots commerciaux pour collecter des informations.
En ce qui concerne les bots malveillants, la plupart d’entre eux utilisent PhantomJS pour effectuer du web scraping. Cependant, le volume de requêtes est assez faible : près de 15K requêtes par heure, ce qui est ~15 fois moins que le volume de requêtes de bots liées à Puppeteer Extra Stealth.