navigateur internet sans tête? [fermé]

j'aimerais faire ce qui suit. Accédez à un site web, cliquez sur quelques liens spécifiques, puis cliquez sur un lien de téléchargement. J'aimerais que ce soit une tâche programmée sur windows ou un travail cron sur Linux. Je ne suis pas difficile au sujet de la langue que j'utilise, mais je voudrais ceci pour courir avec Out mettant une fenêtre de navigateur vers le haut sur l'écran si possible.

65
demandé sur hippietrail 2009-05-02 16:13:23

14 réponses

Voici une liste de navigateurs sans tête que je connais:

  • Interface Htmlunit - Java. Moteur de navigateur personnalisé. Prise en charge limitée de JavaScript / DOM émulé. L'Open source.
  • Fantôme - Python. Basé sur WebKit. Prise en charge complète de JavaScript. L'Open source.
  • Twill - Python/ligne de commande. Moteur de navigateur personnalisé. Pas De JavaScript. L'Open source.
  • PhantomJS - ligne de commande/toutes les plates-formes. Basé sur WebKit. Prise en charge complète de JavaScript. L'Open source.
  • Awesomium - c++/.NET/toutes les plateformes. Le chrome. Prise en charge complète de JavaScript. Commercial / gratuit.
  • SimpleBrowser - .NET 4/c#. Moteur de navigateur personnalisé. Pas de prise en charge de JavaScript. L'Open source.
  • ZombieJS - Nœud.js. Moteur de navigateur personnalisé. Prise en charge de JavaScript/émulé DOM. L'Open source. Basé sur jsdom .
  • EnvJS - JavaScript via Java/Rhino. Moteur de navigateur personnalisé. Prise en charge de JavaScript/émulé DOM. L'Open source.
  • Watir-webdriver with headless gem - Ruby via WebDriver. Prise en charge complète de JS via les navigateurs (Firefox/Chrome/Safari/IE).
  • Spynner - Python only. PyQT et WebKit.
  • Jsdom - Node.js. Moteur de navigateur personnalisé. Supporte JS via emulated DOM. L'Open source.
  • TrifleJS - port of PhantomJS using MSIE (Trident) and V8. L'Open source.
  • ui4j - Pure Java 8 solution. Une bibliothèque wrapper autour du moteur WebKit JavaFx incl. headless modes.
  • Chromium Embedded Framework - mise à jour complète de la version embedded du chrome avec rendu hors écran au besoin. C / C++, avec .net wrappers (et d'autres langues). Comme il est chrome, il a le soutien pour tout . Sous licence BSD.
  • Selenium WebDriver - prise en charge complète du JavaScript par les navigateurs (Firefox, IE, Chrome, Safari, Opera). sont C#, Java, JavaScript, Haskell, Perl, Ruby, PHP, Python, Objective-C, et R. Officieux de fixations sont disponibles pour Qt et Go . L'Open source.

les navigateurs sans tête qui ont la prise en charge JavaScript via un DOM émulé ont généralement des problèmes avec certains sites qui utilisent des fonctionnalités de navigateur plus avancées/obscures, ou ont une fonctionnalité qui a des dépendances visuelles (par exemple via les positions CSS et ainsi de suite), si alors que la prise en charge JavaScript pure dans ces navigateurs est généralement complète, la fonctionnalité prise en charge réelle du navigateur doit être considérée comme partielle seulement.

(Note: la version originale de ce billet ne mentionnait que HtmlUnit, d'où les commentaires. Si vous connaissez d'autres implémentations de navigateur sans tête et avez des droits d'édition, n'hésitez pas à éditer ce post et à les ajouter.)

146
répondu Nathan Ridley 2018-06-04 18:15:43

Check out twill , un langage de script très pratique pour exactement ce que vous recherchez. Des exemples :

setlocal username <your username>
setlocal password <your password>

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

code 200     # make sure form submission is correct!

il y a aussi une API Python si vous cherchez plus de flexibilité.

5
répondu orip 2009-05-11 09:08:04

regarder PhantomJS , un JavaScript automatisation basée sur le cadre disponible pour Windows, Mac OS X, Linux, autres *ix systèmes.

avec PhantomJS, vous pouvez faire des choses comme ça:

console.log('Loading a web page');

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

page.open(url, function (status) {
    // perform your task once the page is ready ...
    phantom.exit();
});

ou évaluer un titre de la page :

var page = require('webpage').create();
page.open(url, function (status) {
    var title = page.evaluate(function () {
        return document.title;
    });
    console.log('Page title is ' + title);
});

Exemples de PhantomJS de " Démarrage rapide de la page. Vous pouvez même rendre une page à un PNG, JPEG ou PDF en utilisant la méthode render () .

3
répondu SteAp 2012-04-19 22:42:10

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

cela peut être fait avec n'importe quelle langue qui supporte COM (Delphi, VB6, VB.net, C#, C++,...)

bien sûr, c'est une solution rapide et sale et pourrait ne pas être approprié dans votre situation.

2
répondu Daniel Rikowski 2009-05-02 12:18:00

PhantomJS est un navigateur WebKit sans tête que vous pouvez configurer avec JavaScript.

2
répondu xn. 2011-11-08 17:21:39

sauf pour le téléchargement automatique du fichier (comme c'est une boîte de dialogue) un formulaire win avec le webcontrol intégré fera ceci.

regarder Watin et Watin Enregistreur . Ils peuvent aider avec C # code qui peut se connecter à votre site web, naviguer à une URL et peut-être même aider à automatiser le téléchargement de fichier.

YMMV though.

1
répondu Wayne 2009-05-02 12:19:46

si les liens sont connus (E. g, vous ne devez pas chercher la page pour eux), alors vous pouvez probablement utiliser wget . Je crois qu'il va faire de la gestion de l'état à travers de multiples extractions.

si vous êtes un peu plus entreprenant, alors je voudrais plonger dans les nouvelles goodies dans Python 3.0 . Ils redirigent l'interface vers leur pile HTTP et, IMHO, ont une interface très agréable qui est sensibles à ce type de script.

1
répondu D.Shawley 2009-05-02 12:27:42

Node.js avec YUI sur le serveur. Regardez cette vidéo: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/

le type de cette vidéo Dav Glass montre un exemple de la façon dont il utilise le noeud pour récupérer une page de Digg. Il a ensuite attaché YUI au DOM qu'il a attrapé et peut le manipuler complètement.

1
répondu j03m 2011-03-18 13:57:19

si vous utilisez PHP-try http://mink.behat.org/

1
répondu everzet 2011-10-23 17:15:10

vous pouvez utiliser Watir avec Ruby ou Watin avec mono.

0
répondu Paco 2009-05-02 12:28:26

vous pouvez également utiliser des en-têtes Http Live (Firefox extension) pour enregistrer les en-têtes qui sont envoyés sur le site (Login - > Links - > Download Link) et ensuite les répliquer avec php en utilisant fsockopen. La seule chose que vous aurez probablement besoin de varier est la valeur du cookie que vous recevez de la page de connexion.

0
répondu Alekc 2009-05-02 12:29:50

libCURL peut être utilisé pour créer quelque chose comme ceci.

0
répondu Adam Pierce 2009-05-02 13:15:01

ne pouvez-vous pas simplement utiliser un gestionnaire de téléchargement?

il y en a de meilleurs, mais FlashGet intègre le navigateur et prend en charge l'authentification. Vous pouvez vous connecter, cliquer sur un tas de liens et les mettre en file d'attente et programmer le téléchargement.

vous pourriez écrire quelque chose qui, disons, agit comme un proxy qui saisit des liens spécifiques et les fait la queue pour téléchargement ultérieur, ou un bookmarklet Javascript qui modifie les liens pour passer à "http://localhost:1234/download_queuer?url=" + $link.href et faire la queue téléchargements-mais vous réinventeriez la roue du gestionnaire de téléchargement, et avec l'authentification, cela peut être plus compliqué..

ou, si vous voulez le bit" login, click links "pour être automatisé aussi - regarder dans screen-scraping .. Fondamentalement, vous chargez la page via une bibliothèque HTTP, trouver les liens de téléchargement et les télécharger..

exemple légèrement simplifié, en utilisant Python:

import urllib
from BeautifulSoup import BeautifulSoup
src = urllib.urlopen("http://%s:%s@example.com" % ("username", "password"))
soup = BeautifulSoup(src)

for link_tag in soup.findAll("a"):
    link = link_tag["href"]
    filename = link.split("/")[-1] # get everything after last /
    urllib.urlretrieve(link, filename)

qui téléchargerait chaque lien sur example.com après l'authentification avec le nom d'utilisateur/mot de passe de "nom d'utilisateur" et "mot de passe". Vous pouvez, bien sûr, trouver des liens plus spécifiques en utilisant le sélecteur HTML de BeautifulSoup (par exemple, vous pouvez trouver tous les liens avec la classe "download", ou les URL qui commencent par http://cdn.example.com ).

vous pourriez faire la même chose dans à peu près n'importe quelle langue..

0
répondu dbr 2017-05-23 11:46:38

.NET contient le système .Windows.Forme.WebBrowser . Vous pouvez créer une instance de ceci, l'Envoyer à une URL, et puis facilement analyser le html sur cette page. Vous pouvez alors suivre les liens que vous avez trouvés, etc.

j'ai travaillé avec cet objet que de façon minimale, donc je ne suis pas un expert, mais si vous êtes déjà familier avec .NET alors il serait probablement intéressant de regarder dans.

0
répondu goric 2009-05-02 14:09:51