web-dev-qa-db-ja.com

Pythonを使用してブラウジングを自動化する方法は?

特定のウェブサイトで一連の手順を実行し、フォームに入力し、送信ボタンをクリックし、データをサーバーに送信し、応答を受信し、応答に基づいて再度何かを実行し、サーバーにデータを送信する必要があるとしますウェブサイトの。 Pythonにはwebbrowserモジュールがあることは知っていますが、Webブラウザーを呼び出さずにこれを実行したいです。純粋なスクリプトである必要はありません。

Pythonで利用できるモジュールはありますか?
ありがとう

27
kush87

mechanize もご覧ください。 「ステートフルなプログラムによるWebブラウジング」(サイトごと)を処理することを意図しています。

16
arcanum

Seleniumはあなたが望むことを正確に行い、javascriptを処理します

18
adaptive

すべての答えは古く、私はお勧めします requests の大ファンです

ホームページから:

Pythonの標準urllib2モジュールは、必要なHTTP機能のほとんどを提供しますが、APIは完全に壊れています。それは別の時間のために、そして別のウェブのために構築されました。最も単純なタスクを実行するには、膨大な量の作業(メソッドのオーバーライドを含む)が必要です。

物事はこのようであってはなりません。 Pythonではありません。

8
Foo Bar User

最良の解決策は requestsBeautifulSoup の組み合わせだと思います。質問を更新して、更新されたままにしたかっただけです。

7
Leonardo

Selenium http://www.seleniumhq.org/ は私にとって最適なソリューションです。 Python、Java、または好きなプログラミング言語で簡単にコーディングできます。プログラムに変換する簡単なシミュレーション。

3
Yuda Prawira

mechanize のラッパーである zope.testbrowser を忘れないでください。

zope.testbrowserは、テストに特化した使いやすいプログラム可能なWebブラウザーを提供します。

2

pythonこれを支援するモジュールがたくさんあります。たとえば、 rllib および htmllib

アプローチ方法を変更すると、問題はより単純になります。 「いくつかのフォームに入力し、送信ボタンをクリックし、データをサーバーに送り返し、応答を受信します」と言います。これは4段階のプロセスのように聞こえます。

実際、あなたがする必要があるのは、ウェブサーバーにデータを投稿して応答を取得することです。

これは次のように簡単です。

>>> import urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
>>> print f.read()

(urllibドキュメントから取られた例)。

応答をどうするかは、HTMLがどれだけ複雑で、何をしたいかによって異なります。正規表現を1つまたは2つ使用して解析することもできますし、htmllib.HTMLParserクラスを使用することもできますし、 Beautiful Soup のような高レベルのより柔軟なパーサーを使用することもできます。

2
roomaroo

Selenium2 にはwebdriverが含まれます。これには pythonバインディング があり、ヘッドレスhtmlUnitドライバーを使用するか、firefoxに切り替えるか、グラフィカルなデバッグ用にchrome 。

2
Nathan

Java開発者。 http://htmlunit.sourceforge.net/apidocs/index.html の場合、HTMLUNITはパッケージです。

1
Guru

私は iMacros Firefoxプラグイン (無料)が非常にうまく機能することを発見しました。

Windows COMオブジェクトインターフェイスを使用してPythonで自動化できます。以下に http://wiki.imacros.net/PythonPython Windows拡張機能 が必要です。

import win32com.client
def Hello():
    w=win32com.client.Dispatch("imacros")
    w.iimInit("", 1)
    w.iimPlay("Demo\\FillForm")
if __name__=='__main__':
    Hello()
1
twasbrillig

私が見つけた(そして現在実装している)最良の解決策は次のとおりです:-pythonでSelenium webdriverを使用するスクリプト-PhantomJSヘッドレスブラウザ

1
Kostas Demiris

Internet Explorer固有ですが、かなり良い:

http://pamie.sourceforge.net/

Urllib/BeautifulSoupと比較した利点は、IEを使用しているためJavascriptも実行されることです。

0
fraca7

おそらく rllib2 が必要です。 HTTPS、Cookie、認証などを処理できます。 BeautifulSoup もHTMLページの解析に役立つでしょう。

0
Steven Huwig

last italian pycon (pdf)からこれらのスライドを見ることができます:著者は、Pythonでスクレイピングと自動ブラウジングを行うためのライブラリのほとんどをリストしました。あなたはそれを見るかもしれません。

私は非常に気に入っています twill (これは既に提案されています)、これは鼻の作者の一人によって開発され、特にウェブサイトのテストを目的としています。

0
dalloliogm

httplib2 + beautifulsoup

Firefox + firebug + httpreplayを使用して、JavaScriptがWebサイトからブラウザーとやり取りする内容を確認します。 httplib2を使用すると、基本的にpostとgetで同じことができます

0
user428370

自動化のためにあなたは間違いなくチェックアウトしたいかもしれません

ウェブボット

Seleniumに基づいており、パラメーターに基づいてclick、typeなどのアクションを実行する要素を自動的に見つけるなど、非常に少ないコードで多くの機能を提供します。

クラス名とIDが動的に変化するサイトでも機能します。

ここにドキュメントがあります: https://webbot.readthedocs.io/

0
Natesh bhat