web-dev-qa-db-ja.com

ヘッドレスインターネットブラウザ?

私は次のことをしたいと思います。 Webサイトにログインし、いくつかの特定のリンクをクリックしてから、ダウンロードリンクをクリックします。これをWindowsのスケジュールされたタスクまたはLinuxのcronジョブとして実行したいと思います。使用する言語については気にしませんが、可能であればブラウザウィンドウを画面に表示せずに実行したいと思います。

68
Jared

私が知っているヘッドレスブラウザのリストは次のとおりです。

  • 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。オープンソース。
  • Watir-webdriver with headless gem -Ruby WebDriver経由。ブラウザ(Firefox/Chrome/Safari/IE)経由のフルJSサポート。
  • Spynner -Pythonのみ。PyQTおよびWebKit。
  • jsdom -Node.js。カスタムブラウザエンジン。エミュレートされたDOMを介してJSをサポートします。オープンソース。
  • TrifleJS -MSIE(Trident)およびV8を使用したPhantomJSのポート。オープンソース。
  • i4j -Pure Java 8ソリューション。ヘッドレスモードを含むJavaFx WebKitエンジンのラッパーライブラリ。
  • Chromium Embedded Framework -必要に応じてオフスクリーンレンダリングを行う完全なChromiumの組み込みバージョン。 C/C++ 、. NETラッパー(および他の言語)。 Chromiumであるため、everythingをサポートしています。 BSDライセンス。
  • Selenium WebDriver -ブラウザー(Firefox、IE、Chrome、Safari、Opera)を介したJavaScriptの完全サポート。公式にサポートされている bindings は、C#、Java、JavaScript、Haskell、Perl、Ruby、PHP、Python、Objective-C、およびRです。非公式のバインディングは Qt および- Go 。オープンソース。

エミュレートされたDOMを介してJavaScriptをサポートするヘッドレスブラウザーは、より高度な/あいまいなブラウザー機能を使用するサイトや、視覚的な依存関係(CSS位置など)を持つ機能を持つサイトに問題があるため、これらの純粋なJavaScriptサポートはブラウザは一般に完全であるため、実際にサポートされているブラウザ機能は部分的なものと見なされる必要があります。

(注:この投稿のオリジナルバージョンはHtmlUnitのみに言及していたため、コメントです。他のヘッドレスブラウザーの実装を知っており、編集権限がある場合は、この投稿を編集して追加してください。)

148
Nathan Ridley

twill を確認してください。これは、探しているものにぴったりの非常に便利なスクリプト言語です。 examples から:

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 もあります。

5
orip

PhantomJSJavaScriptベースの自動化フレームワークをご覧ください。Windows、Mac OS X、Linux、その他の* ixシステムで使用できます。

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のクイックスタート ページの例。 ページをPNG、JPEG、またはPDFにレンダリングrender() メソッドを使用することもできます。

3
SteAp

私はかつてInternet Explorer ActiveXコントロール(WebBrowser、MSHTML)を使用してこれを行いました。表示せずにインスタンス化できます。

これは、COMをサポートする任意の言語(Delphi、VB6、VB.net、C#、C++など)で実行できます。

もちろん、これは手っ取り早い解決策であり、状況によっては適切ではないかもしれません。

2
Daniel Rikowski

PhantomJSは、JavaScriptを使用してスクリプトを作成できる、ヘッドレスWebKitベースのブラウザーです。

2
xn.

サーバー上のYUIを使用したNode.js。このビデオを確認してください: http://www.yuiblog.com/blog/2010/09/29/video-glass-node/

このビデオの男Dav Glassは、ノードを使用してDiggからページを取得する方法の例を示しています。その後、彼は掴んだDOMにYUIを添付し、完全に操作できます。

1
j03m

PHP-try http://mink.behat.org/ を使用する場合

1
everzet

ファイルの自動ダウンロード(ダイアログボックス)を除き、webcontrolが組み込まれたwinフォームがこれを行います。

Watin および Watin Recorder を見ることができます。 Webサイトへのログイン、URLへのナビゲート、さらにはファイルのダウンロードの自動化を可能にするC#コードが役立ちます。

しかし、YMMV。

1
Wayne

リンクが既知の場合(たとえば、ページを検索する必要がない場合)、おそらく wget を使用できます。私はそれが複数のフェッチにわたって状態管理を行うと信じています。

あなたがもう少し進取的であるなら、私は Python 3. の新しい利点を掘り下げるでしょう。彼らはHTTPスタックへのインターフェースをやり直し、私見では、このタイプのスクリプトの影響を受けやすい very Nice interface を持っています。

1
D.Shawley

libCURL を使用して、このようなものを作成できます。

0
Adam Pierce

ダウンロードマネージャーだけを使用することはできませんか?

より良いものがありますが、FlashGetにはブラウザ統合があり、認証をサポートしています。ログインし、多数のリンクをクリックしてキューに入れ、ダウンロードをスケジュールできます。

たとえば、特定のリンクをキャッチして後でダウンロードするためにキューに入れるプロキシとして機能するもの、またはリンクを変更して"http://localhost:1234/download_queuer?url=" + $link.hrefに移動してダウンロードをキューに入れるJavascriptブックマークレットを作成できますが、 download-manager-wheelを再発明し、認証によりさらに複雑になる可能性があります。

または、「ログイン、リンクのクリック」ビットも自動化する場合は、 screen-scraping を調べます。基本的には、HTTPライブラリ経由でページをロードし、ダウンロードリンクを見つけてダウンロードします。 。

Pythonを使用した少し単純化した例:

import urllib
from BeautifulSoup import BeautifulSoup
src = urllib.urlopen("http://%s:%[email protected]" % ("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's HTMLセレクターを使用して、より具体的なリンクを見つけることができます(たとえば、「download」クラスのすべてのリンク、またはhttp://cdn.example.comで始まるURLを見つけることができます)。

ほとんどすべての言語で同じことができます。

0
dbr

.NETには System.Windows.Forms.WebBrowser が含まれます。このインスタンスを作成してURLに送信し、そのページのhtmlを簡単に解析できます。その後、見つけたリンクなどをたどることができます。

私はこのオブジェクトを最小限しか使用していないため、専門家ではありませんが、既に.NETに精通している場合は、おそらく検討する価値があるでしょう。

0
goric

Watir とRubyまたは Watin モノで。

0
Paco

また、ライブHttpヘッダー(Firefox拡張機能)を使用して、サイトに送信されるヘッダーを記録し(ログイン->リンク->ダウンロードリンク)、次にfsockopenを使用してphpで複製できます。おそらく変化させる必要があるのは、ログインページから受け取るCookieの値だけです。

0
Alekc