ホームページ  >  記事  >  バックエンド開発  >  Selenium を使用してログインをシミュレートし、ページ コンテンツを取得します

Selenium を使用してログインをシミュレートし、ページ コンテンツを取得します

WBOY
WBOYオリジナル
2016-07-25 08:46:271821ブラウズ

従来の 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.セレンを開く

  1. java -jar path_to_selenium.jar
  2. [-timeout 0]
  3. [-Dwebdriver.server.session.timeout=0]
  4. -Dwebdriver.chrome.driver="path_to_chrome_driver"
  5. -browser [-timeout=0] [ -browserTimeout=0]
  6. browserName=chrome,[timeout=0]
コードをコピー

長時間実行する必要がある場合は、各「[ ]」にタイムアウト時間を適切に設定してください

3.phpコード

  1. function waitForAjax() {
  2. global $session;
  3. do {
  4. sleep(1);
  5. } while($session->execute(array('script' => "return (document.readyState != 'complete')", 'args' => array())));
  6. } //この関数は Ajax が終了するまでスクリプトをハングします
  7. require_once "webdriver/PHPWebDriver/__init__ .php" ;
  8. //seleniumのPHPカプセル化関数ライブラリのご紹介
  9. // ダウンロードアドレス: https://github.com/Element-34/php-webdriver
  10. // ドキュメント内のブラウザの操作方法は、Allを取得するなど、様々な方法があります。クッキーなど
  11. $wd_host = 'http://127.0.0.1:4444/wd/hub';
  12. $web_driver = new PHPWebDriver_WebDriver($wd_host);
  13. $session = $web_driver->session('chrome' );
  14. //タイムアウト期間を設定します
  15. $session->implicitlyWait(5);
  16. $session->setScriptTimeout(5);
  17. $session->setPageLoadTimeout(15);
  18. //接続を開きます
  19. $ session->open('http://login.m.taabao.com/login.htm?tpl_redirect_url=http://m.taabao.com');
  20. //必要に応じて確認コードを入力してください
  21. sleep(5);
  22. //アカウントのパスワードを設定してください
  23. $session->element('css selector', 'input[name=TPL_username]')->value(array('value' => str_split ('your_username')));
  24. $session->element('css selector', 'input[name=TPL_password]')->value(array('value' => str_split('your_password') ) );
  25. //ログインボタンのクリックをシミュレートします
  26. $elements = $session->element('css selector', '.c-btn-oran-big')->click();
  27. // m .taabao.com を開きます。この時点で Cookie が取得されています
  28. $session->open('http://m.taabao.com/');
  29. //ajax がロードされるのを待っています
  30. waitForAjax( );
  31. $elements = $session->element('css selector', 'body')->text();
  32. //ログイン後のajax実行時にページ内容を取得
  33. ?>
コードをコピー

その後、必要に応じて $session インスタンスで要素メソッドのさまざまな操作を実行できます。

要素を選択する次のメソッドをサポートします

ID xpath リンクテキスト 部分的なリンクテキスト 名前 タグ名 クラス名 CSSセレクター
PS: さまざまなライブラリが Ajax 状況を検出する方法

jQuery: "jQuery.active"

プロトタイプ: "Ajax.activeRequestCount"

Dojo: "dojo.io.XMLHTTPTransport.inFlight.length"

ログイン、セレン


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。