従来の cURL はページ内でブラウザ スクリプトを実行できません。また、クローラーに制限がある一部の Web ページをクロールする場合、制限を突破するために詳細な http ヘッダーを設定する必要があることが多く、記述がより複雑になります。
Selenium の概要:
Selenium は、Web アプリケーションのテスト用のツールです (テストだけではありません)。
Selenium は、実際のユーザーと同様にブラウザ内で直接実行されます。より多くのブラウザをサポートします。
コンポーネント
Selenium IDE: スクリプトを記録する機能を備えた Firefox プラグイン。アクションの自動記録と他の言語での自動化スクリプトの自動生成をサポートします。
Selenium リモート コントロール (RC): 複数のプラットフォーム (Windows、Linux) と複数のブラウザ (IE、Firefox、Opera、Safari、Chrome) をサポートし、複数の言語 (Java、Ruby、Python、Perl、PHP) で使用できます、C# )ユースケースを作成します。
Selenium Grid: Selenium-RC を大規模なテスト ケース セットまたは異なる環境で実行する必要があるテスト ケース セットに合わせて拡張できます。
例: Chrome を駆動して Taobao へのログインをシミュレートし、ページ情報を取得します
1. プロジェクトのホームページに移動します: SeleniumHQ のダウンロード
Selenium サーバー (旧名 Selenium RC サーバー)
サードパーティのブラウザドライバーはseleniumhqによって開発されていません
(Chromeドライバーを選択)
サードパーティの言語バインディングは seleniumhq によって開発されていません
(Adam Goucher (SeHQ 推奨 PHP クライアント) の PHP を選択してください)
2.セレンを開く
- java -jar path_to_selenium.jar
- [-timeout 0]
- [-Dwebdriver.server.session.timeout=0]
- -Dwebdriver.chrome.driver="path_to_chrome_driver"
- -browser [-timeout=0] [ -browserTimeout=0]
- browserName=chrome,[timeout=0]
-
コードをコピー
長時間実行する必要がある場合は、各「[ ]」にタイムアウト時間を適切に設定してください
3.phpコード
- function waitForAjax() {
- global $session;
- do {
- sleep(1);
- } while($session->execute(array('script' => "return (document.readyState != 'complete')", 'args' => array())));
- } //この関数は Ajax が終了するまでスクリプトをハングします
-
- require_once "webdriver/PHPWebDriver/__init__ .php" ;
- //seleniumのPHPカプセル化関数ライブラリのご紹介
- // ダウンロードアドレス: https://github.com/Element-34/php-webdriver
- // ドキュメント内のブラウザの操作方法は、Allを取得するなど、様々な方法があります。クッキーなど
-
- $wd_host = 'http://127.0.0.1:4444/wd/hub';
- $web_driver = new PHPWebDriver_WebDriver($wd_host);
-
- $session = $web_driver->session('chrome' );
-
- //タイムアウト期間を設定します
- $session->implicitlyWait(5);
- $session->setScriptTimeout(5);
- $session->setPageLoadTimeout(15);
-
- //接続を開きます
- $ session->open('http://login.m.taabao.com/login.htm?tpl_redirect_url=http://m.taabao.com');
-
- //必要に応じて確認コードを入力してください
- sleep(5);
-
- //アカウントのパスワードを設定してください
- $session->element('css selector', 'input[name=TPL_username]')->value(array('value' => str_split ('your_username')));
- $session->element('css selector', 'input[name=TPL_password]')->value(array('value' => str_split('your_password') ) );
-
- //ログインボタンのクリックをシミュレートします
- $elements = $session->element('css selector', '.c-btn-oran-big')->click();
-
- // m .taabao.com を開きます。この時点で Cookie が取得されています
- $session->open('http://m.taabao.com/');
-
- //ajax がロードされるのを待っています
- waitForAjax( );
-
- $elements = $session->element('css selector', 'body')->text();
- //ログイン後のajax実行時にページ内容を取得
- ?>
-
コードをコピー
その後、必要に応じて $session インスタンスで要素メソッドのさまざまな操作を実行できます。
要素を選択する次のメソッドをサポートします
ID
xpath
リンクテキスト
部分的なリンクテキスト
名前
タグ名
クラス名
CSSセレクター
PS: さまざまなライブラリが Ajax 状況を検出する方法
jQuery: "jQuery.active"
プロトタイプ: "Ajax.activeRequestCount"
Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"
|