70 votes

Navigaueur Web sans tête?

Je voudrais faire ce qui suit. Me connecter à un site web, cliquer sur quelques liens spécifiques, puis cliquer sur un lien de téléchargement. J'aimerais exécuter ceci soit en tant que tâche planifiée sur Windows, soit en tant que tâche cron sur Linux. Je ne suis pas pointilleux sur le langage que j'utilise, mais j'aimerais que cela s'exécute sans ouvrir de fenêtre de navigateur à l'écran si possible.

1 votes

Pourquoi instancier un navigateur si vous n'allez pas l'afficher? Il existe des bibliothèques dans la plupart des langages pour transférer des fichiers via des URL. Dites-nous quel est votre langage de mise en œuvre et nous pourrions vous orienter dans la bonne direction.

3 votes

Dites-nous également si vous avez besoin du support JavaScript, car c'est important. Certaines bibliothèques n'ont pas d'interprètes JS intégrés.

155voto

Nathan Ridley Points 10444

Voici une liste de navigateurs headless que je connais :

  • HtmlUnit - Java. Moteur de navigateur personnalisé. Prise en charge JavaScript limitée/Emulation DOM. Open source.
  • Ghost - Python seulement. Basé sur WebKit. Prise en charge complète de JavaScript. Open source.
  • Twill - Python/ligne de commande. Moteur de navigateur personnalisé. Pas de JavaScript. Open source.
  • PhantomJS - Ligne de commande/toutes plateformes. Basé sur WebKit. Prise en charge complète de JavaScript. Open source.
  • Awesomium - C++/.NET/toutes plateformes. Basé sur Chromium. Prise en charge complète de JavaScript. Commercial/gratuit.
  • SimpleBrowser - .NET 4/C#. Moteur de navigateur personnalisé. Pas de prise en charge JavaScript. Open source.
  • ZombieJS - Node.js. Moteur de navigateur personnalisé. Prise en charge JavaScript/Emulation DOM. Open source. Basé sur jsdom.
  • EnvJS - JavaScript via Java/Rhino. Moteur de navigateur personnalisé. Prise en charge JavaScript/Emulation DOM. Open source.
  • Watir-webdriver avec headless gem - Ruby via WebDriver. Prise en charge JS complète via les navigateurs (Firefox/Chrome/Safari/IE).
  • Spynner - Python seulement. PyQT et WebKit.
  • jsdom - Node.js. Moteur de navigateur personnalisé. Prise en charge JS via Emulated DOM. Open source.
  • TrifleJS - version de PhantomJS utilisant MSIE (Trident) et V8. Open source.
  • ui4j - Solution Pure Java 8. Une bibliothèque d'enrobage autour du moteur WebKi JavaFx incluant les modes headless.
  • Chromium Embedded Framework - Version embarquée complète et à jour de Chromium avec rendu hors écran au besoin. C/C++, avec wrappers .NET (et autres langages). Comme il s'agit de Chromium, il prend en charge tout. Sous licence BSD.
  • Selenium WebDriver - Prise en charge complète de JavaScript via navigateurs (Firefox, IE, Chrome, Safari, Opera). Les liaisons officiellement prises en charge sont C#, Java, JavaScript, Haskell, Perl, Ruby, PHP, Python, Objective-C et R. Des liaisons non officielles sont disponibles pour Qt et Go. Open source.

Les navigateurs headless qui prennent en charge JavaScript via un DOM émulé ont généralement des problèmes avec certains sites utilisant des fonctionnalités de navigateur plus avancées/obscures, ou ayant des fonctionnalités avec des dépendances visuelles (par ex. via des positions CSS, etc.), donc bien que la prise en charge pure du JavaScript dans ces navigateurs soit généralement complète, la fonctionnalité de navigateur réellement prise en charge devrait être considérée comme partielle seulement.

(Remarque : La version originale de cet article ne mentionnait que HtmlUnit, d'où les commentaires. Si vous connaissez d'autres implémentations de navigateurs headless et que vous avez des droits de modification, n'hésitez pas à modifier cet article et à les ajouter.)

0 votes

+1, le support JS de HTMLUnit est un gros avantage

0 votes

Cela semble être le meilleur choix que j'ai trouvé jusqu'à présent dans ma recherche d'un navigateur sans tête avec support JS.

12 votes

Le support JS pour HTMLUnit est terrible. Ce n'est malheureusement pas la solution.

5voto

orip Points 28225

Découvrez twill, un langage de script très pratique pour ce que vous recherchez. Parmi les exemples:

setlocal username 
setlocal password 

go http://www.slashdot.org/
formvalue 1 unickname $username
formvalue 1 upasswd $password
submit

code 200     # assurez-vous que la soumission du formulaire est correcte!

Il existe également une API Python si vous recherchez plus de flexibilité.

3voto

SteAp Points 5498

Jetez un œil à PhantomJS, un cadre d'automatisation basé sur JavaScript disponible pour Windows, Mac OS X, Linux et d'autres systèmes *ix.

Avec PhantomJS, vous pouvez faire des choses comme ceci:

console.log('Chargement d'une page web');

var page = new WebPage();
var url = "http://www.phantomjs.org/";

page.open(url, function (status) {
    // effectuez votre tâche une fois que la page est prête ...
    phantom.exit();
});

Ou évaluer un titre de page:

var page = require('webpage').create();
page.open(url, function (status) {
    var title = page.evaluate(function () {
        return document.title;
    });
    console.log('Le titre de la page est ' + title);
});

Exemples de la page Quickstart de PhantomJS. Vous pouvez même rendre une page en PNG, JPEG ou PDF en utilisant la méthode render().

0 votes

Cette réponse m'a aidé à sauvegarder la source après l'exécution du javascript. : stackoverflow.com/a/32019723/511438

1 votes

Une question assez bête, mais peut-être l'avez-vous testée : PhantomJS est-il censé fonctionner sur des sites demandant un nom d'utilisateur et un mot de passe ?

2voto

Daniel Rikowski Points 27193

J'ai déjà fait cela en utilisant le contrôle ActiveX Internet Explorer (WebBrowser, MSHTML). Vous pouvez l'instancier sans le rendre visible.

Cela peut être fait avec n'importe quel langage qui prend en charge COM (Delphi, VB6, VB.net, C #, C ++, ...).

Bien sûr, il s'agit d'une solution rapide et peu élégante qui pourrait ne pas convenir à votre situation.

2voto

xn. Points 4122

PhantomJS est un navigateur basé sur WebKit sans interface graphique que vous pouvez scripter avec JavaScript.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X