私は次のことをしたいと思います。Web サイトにログインし、特定のリンクをいくつかクリックしてから、ダウンロード リンクをクリックします。これを Windows のスケジュールされたタスクまたは Linux の cron ジョブとして実行したいと思います。私は使用する言語にこだわりはありませんが、可能であればブラウザ ウィンドウを画面に表示せずに実行したいと考えています。
14 に答える
私が知っているヘッドレスブラウザのリストは次のとおりです。
- HtmlUnit - Java. カスタム ブラウザ エンジン。限定された JavaScript サポート/DOM エミュレート。オープンソース。
- ゴースト- Python のみ。WebKit ベース。JavaScript の完全なサポート。オープンソース。
- Twill - Python/コマンドライン. カスタム ブラウザ エンジン。JavaScript はありません。オープンソース。
- PhantomJS - コマンドライン/すべてのプラットフォーム. WebKit ベース。JavaScript の完全なサポート。オープンソース。
- Awesomium - C++/.NET/すべてのプラットフォーム。クロムベース。JavaScript の完全なサポート。商用/無料。
- SimpleBrowser - .NET 4/C#。カスタム ブラウザ エンジン。JavaScript はサポートされていません。オープンソース。
- ZombieJS - Node.js. カスタム ブラウザ エンジン。JavaScript のサポート/エミュレートされた DOM。オープンソース。jsdomに基づく。
- EnvJS - Java/Rhino 経由の JavaScript。カスタム ブラウザ エンジン。JavaScript のサポート/エミュレートされた DOM。オープンソース。
- headless gemを使用したWatir-webdriver - WebDriver 経由の Ruby。ブラウザ (Firefox/Chrome/Safari/IE) を介した完全な JS サポート。
- Spynner - Python のみ。PyQT と WebKit。
- jsdom - Node.js. カスタム ブラウザ エンジン。エミュレートされた DOM を介して JS をサポートします。オープンソース。
- TrifleJS - MSIE (Trident) と V8 を使用した PhantomJS のポート. オープンソース。
- ui4j - 純粋な Java 8 ソリューション. JavaFx WebKit エンジンを含むラッパー ライブラリ。ヘッドレスモード。
- Chromium Embedded Framework - 必要に応じてオフスクリーン レンダリングを行う Chromium の完全な最新の組み込みバージョン。C/C++、.NET ラッパー (およびその他の言語) を使用。Chromiumなので、すべてに対応しています。BSDライセンス。
- Selenium WebDriver - ブラウザー (Firefox、IE、Chrome、Safari、Opera) による JavaScript の完全サポート。公式にサポートされているバインディングは、C#、Java、JavaScript、Haskell、Perl、Ruby、PHP、Python、Objective-C、および R です。非公式のバインディングは、QtおよびGoで使用できます。オープンソース。
エミュレートされた DOM を介して JavaScript をサポートするヘッドレス ブラウザーは、一般に、より高度な/あいまいなブラウザー機能を使用するサイトや、視覚的な依存関係 (CSS の位置などを介する機能など) を使用するサイトで問題が発生します。ブラウザーは一般的に完全ですが、実際にサポートされているブラウザー機能は部分的なものと見なす必要があります。
(注: この投稿の元のバージョンでは、HtmlUnit についてのみ言及していたため、コメントが付けられています。他のヘッドレス ブラウザーの実装を知っていて、編集権限を持っている場合は、この投稿を編集して追加してください。)
twillを調べてください。これは、探しているものを正確に表す非常に便利なスクリプト言語です。例から:
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!
さらに柔軟性を求める場合は、 Python APIもあります。
Windows、Mac OS X、Linux、その他の *ix システムで使用できるJavaScript ベースの自動化フレームワークであるPhantomJSをご覧ください。
PhantomJS を使用すると、次のようなことができます。
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();
});
または、ページのタイトルを評価します:
var page = require('webpage').create();
page.open(url, function (status) {
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
});
PhantomJS のクイックスタートページの例。render()メソッドを使用して、ページを PNG、JPEG、または PDF にレンダリングすることもできます。
PhantomJS は、JavaScript でスクリプトを作成できるヘッドレス WebKit ベースのブラウザーです。
私は以前、Internet Explorer ActiveX コントロール (WebBrowser、MSHTML) を使用してそれを行いました。表示せずにインスタンス化できます。
これは、COM をサポートする任意の言語 (Delphi、VB6、VB.net、C#、C++ など) で実行できます。
もちろん、これは簡単な解決策であり、状況によっては適切でない場合があります。
サーバー上の YUI を使用する Node.js。このビデオをご覧ください: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/
このビデオの男 Dav Glass は、ノードを使用して Digg からページをフェッチする方法の例を示しています。そして、手に入れた DOM に YUI をアタッチし、それを完全に操作できるようにします。
PHP を使用している場合は、http://mink.behat.org/を試してください。
ファイルの自動ダウンロード (ダイアログ ボックスであるため) を除いて、Web コントロールが埋め込まれた win フォームがこれを行います。
WatinとWatin Recorderを見ることができます。Web サイトにログインしたり、URL に移動したり、ファイルのダウンロードを自動化したりできる C# コードに役立つ場合があります。
YMMVだけど。
リンクがわかっている場合 (たとえば、ページを検索する必要がない場合)、おそらく を使用できますwget
。複数のフェッチにまたがって状態管理を行うと思います。
あなたがもう少し進取の気性に富んでいるなら、私はPython 3.0の新しい機能を掘り下げます。彼らは HTTP スタックへのインターフェースを作り直しました。私見ですが、この種のスクリプトの影響を受けやすい非常に優れたインターフェースを備えています。
libCURLを使用して、このようなものを作成できます。
ダウンロードマネージャーだけを使用することはできませんか?
より良いものもありますが、FlashGetにはブラウザ統合があり、認証をサポートしています。ログインして、たくさんのリンクをクリックし、それらをキューに入れて、ダウンロードをスケジュールすることができます。
たとえば、特定のリンクをキャッチして後でダウンロードできるようにキューに入れるプロキシとして機能するものや、リンクを変更し"http://localhost:1234/download_queuer?url=" + $link.href
てダウンロードをキューに入れるJavascriptブックマークレットを作成することもできますが、ダウンロードマネージャーを再発明することになります。 -ホイール、および認証を使用すると、より複雑になる可能性があります。
または、「ログイン、リンクをクリック」ビットも自動化する場合は、スクリーンスクレイピングを調べます。基本的に、HTTPライブラリを介してページをロードし、ダウンロードリンクを見つけてダウンロードします。
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)
「username」と「password」のユーザー名/パスワードで認証した後、example.com上のすべてのリンクをダウンロードします。もちろん、 BeautifulSoupのHTMLセレクターを使用してより具体的なリンクを見つけることもできます(たとえば、クラス「download」またはで始まるURLを持つすべてのリンクを見つけることができますhttp://cdn.example.com
)。
ほぼすべての言語で同じことができます。
.NET にはSystem.Windows.Forms.WebBrowserが含まれています。このインスタンスを作成して URL に送信し、そのページの html を簡単に解析できます。その後、見つけたリンクなどをたどることができます。
私はこのオブジェクトを最小限しか扱っていないので専門家ではありませんが、既に .NET に精通している場合は、検討する価値があるでしょう。
また、ライブ HTTP ヘッダー (Firefox 拡張機能) を使用して、サイトに送信されるヘッダーを記録し (ログイン -> リンク -> リンクのダウンロード)、fsockopen を使用して php で複製することもできます。おそらく変更する必要があるのは、ログイン ページから受け取る Cookie の値だけです。