70 votes

Naviguateur internet sans tête?

Je voudrais faire ce qui suit. Se connecter à un site web, cliquer sur quelques liens spécifiques, puis cliquer sur un lien de téléchargement. J'aimerais exécuter cela soit en tant que tâche planifiée sur Windows, soit en tant que tâche cron sur Linux. Je ne suis pas exigeant sur le langage que j'utilise, mais j'aimerais que cela s'exécute sans ouvrir une 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. Indiquez-nous votre langage d'implémentation et nous pourrions vous orienter dans la bonne direction.

3 votes

Veuillez également nous dire si vous avez besoin de soutien 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é. Support JS/DOM limité. Open source.
  • Ghost - Python uniquement. Basé sur WebKit. Support complet de JavaScript. Open source.
  • Twill - Python/ligne de commande. Moteur de navigateur personnalisé. Pas de JavaScript. Open source.
  • PhantomJS - Ligne de commande/toutes les plateformes. Basé sur WebKit. Support complet de JavaScript. Open source.
  • Awesomium - C++/.NET/toutes les plateformes. Basé sur Chromium. Support complet de JavaScript. Commercial/gratuit.
  • SimpleBrowser - .NET 4/C#. Moteur de navigateur personnalisé. Pas de support JavaScript. Open source.
  • ZombieJS - Node.js. Moteur de navigateur personnalisé. Prise en charge de JavaScript/émulation du DOM. Open source. Basé sur jsdom.
  • EnvJS - JavaScript via Java/Rhino. Moteur de navigateur personnalisé. Prise en charge de JavaScript/émulation du DOM. Open source.
  • Watir-webdriver avec headless gem - Ruby via WebDriver. Support JS complet via les navigateurs (Firefox/Chrome/Safari/IE).
  • Spynner - Python uniquement. PyQT et WebKit.
  • jsdom - Node.js. Moteur de navigateur personnalisé. Prend en charge JS via émulation du DOM. Open source.
  • TrifleJS - port de PhantomJS utilisant MSIE (Trident) et V8. Open source.
  • ui4j - Solution Java 8 pure. Une bibliothèque d'enrobage autour du moteur WebKit JavaFx incluant des modes headless.
  • Chromium Embedded Framework - Version intégrée complète de Chromium avec rendu hors écran au besoin. C/C++, avec des wrappers .NET (et d'autres langages). Comme il s'agit de Chromium, il prend en charge tout. Licence BSD.
  • Selenium WebDriver - Support complet pour JavaScript via les navigateurs (Firefox, IE, Chrome, Safari, Opera). Des liens officiellement pris en charge pour C#, Java, JavaScript, Haskell, Perl, Ruby, PHP, Python, Objective-C, et R. Des liens non officiels 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 ayant des dépendances visuelles (par ex. via des positions CSS, etc.), donc bien que le support JavaScript pur dans ces navigateurs soit généralement complet, la fonctionnalité de navigateur réellement prise en charge devrait être considérée comme partielle seulement.

(Remarque : La version originale de ce post 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 à éditer ce post et à les ajouter.)

0 votes

+1, le support JS de HTMLUnit est un grand 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 prise en charge de 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. À partir des 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.

En utilisant 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 le titre d'une 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 depuis 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é à enregistrer la source après l'exécution du javascript : stackoverflow.com/a/32019723/511438

1 votes

Une question plutôt stupide, mais avez-vous peut-être testé : Est-ce que PhantomJS est censé fonctionner sur des sites qui requièrent un nom d'utilisateur/mot de passe ?

2voto

Daniel Rikowski Points 27193

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

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

Bien sûr, ceci est une solution rapide et peu soignée et peut ne pas être appropriée dans votre situation.

2voto

xn. Points 4122

PhantomJS est un navigateur basé sur WebKit sans interface graphique avec lequel vous pouvez écrire des scripts en 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