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.
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.)
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é.
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 () .
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.
PhantomJS est un navigateur WebKit sans tête que vous pouvez configurer avec JavaScript.
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.
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.
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.
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.
libCURL peut être utilisé pour créer quelque chose comme ceci.
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..
.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.