私のDebianサーバーのウェブサイトでのみできることを自動化したいです(事前ログインが必要です)。公開APIがないため利用できません。
これを行う方法はありますか?私はテキストベースのブラウザや同様のものを考えました。
答え1
WWW :: Mechanizeを見てください(例:次の場所)。http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/Examples.pod)。これはWebページをオブジェクトとして扱い、メソッドを介してすべての要素にアクセスできるようにします。
例えば
$m->get("https://lists.ccs.neu.edu/bin/admindb/$listname");
$m->set_visible( $password );
$m->click;
(少なくとも)RubyとPython用のポートもあります。
答え2
あなたは実行することができますセレンたとえば、Pythonを使用してタスクをプログラムしてサーバーにヘッドレスをインストールするpy 仮想ディスプレイ。
pyvirtualdisplay
xvfb
、xepher
またはscreenを使用してxvnc
スクリーンショットを撮ることができます(または進行状況をリモートで表示できます)。
Ubuntu 12.04にインストール:
sudo apt-get install python-pip tightvncserver xtightvncviewer
sudo pip install selenium pyvirtualdisplay
次のコマンドを実行します(これは最新のSelenium2 APIを使用しており、古いAPIは引き続き使用できます)。
import subprocess
from pyvirtualdisplay import Display
from selenium import webdriver
def browse_it(port=None):
browser = webdriver.Firefox()
page = browser.get('http://unix.stackexchange.com/questions')
for question in browser.find_elements_by_class_name('question-hyperlink'):
print question.text
if port:
print '--------\nconnect using:\n vncviewer ' + \
'localhost:{}\nand click the xmessage to quit'.format(port)
subprocess.call(['xmessage', 'click to quit'])
browser.quit()
def browse_it_hidden(rfbport=5904):
with Display(backend='xvnc', rfbport=str(rfbport)) as disp:
browse_it(rfbport)
if __name__ == '__main__':
browse_it_hidden()
これにより、xmessage
テスト環境で不要なブラウザのシャットダウンを防ぎます。browse_it()
フロントエンドテストを直接呼び出すこともできます。
Seleniumの結果は、find_element.....()
見つけたばかりの要素の親要素を選択するなどの機能を提供しません。 HTML構文解析パッケージで期待できるものです(どこかでこれが意図的なものだと読みました)。制御できないページをクロールする場合、これらの制限は多少問題になる可能性があります。自分のウェブサイトをテストするときは、id
テストしたいすべての要素を使用するか、独自に作成してclass
簡単に選択できることを確認してください。
答え3
次のいずれかの方法を使用できます。
- WWW::Mechanize を使用する Perl または HTTPClient を使用して独自の Perl を実行することもできます。
- セレン/ネットワークドライバ
- Google ChromeまたはFirefox拡張機能(既存または自分で作成した拡張機能)
- curlとwgetを使用するシェルスクリプト(セッションデータを保存して再送信する必要があります)
- HTMLユニット
- ...
デフォルトでは、Webリソースを照会できるすべての言語は次のとおりです。