シナリオ:
操作ページ中に時々のリンクをクリックして、あなたが動作する新しいホスト開いているウィンドウに切り替える必要があり、この時間を新しいウィンドウがポップアップ表示されます。webdriverをswitch_to.window()メソッドを提供し、スイッチングが異なるウィンドウ内で直接実施することができます。
百度とBaiduの登録ページへのホームは、例えば、直接スイッチに二つのウィンドウに示されています
コードは以下の通りであります:
1 #パケットガイド 2 からセレンインポートwebdriverを 3 から時間インポートSLEEP 。4 #カスタムブラウザ・ハンドル、オープン百度のURL 。5ドライバ= webdriver.Chrome() 。6 driver.implicitly_wait(10 ) 。7 URL = " http://www.baidu .COM 」 。8 driver.get(URL) 。9 #ウィンドウが最大化されている 10 driver.maximize_window() 。11 位百度検索ウィンドウハンドルを取得する 12である seach_windows = driver.current_window_handle 13は #1 印刷Baiduの検索ウィンドウハンドル 14 印刷(seach_windows) 15 #"ログイン"ボタンを右上隅をクリック 16(driver.find_element_by_link_text " ログイン" .clickを)() 17 #にポップで"今すぐ登録"ボタンをクリックしてください 18(driver.find_element_by_xpath " // * [@ = ID "ログインパスポート-POP-ダイアログ"] / DIV / DIV / DIV / DIV [4] / A ' ).click() 。19 #はすべて、現在開いているウィンドウハンドル取得 20れる all_handles = driver.window_handles 21は、 #レジスタにウィンドウ 22 のための newhandle でall_handles: 23 IF!newhandle = seach_windows: 24 driver.switch_to.window(newhandle) 25 印刷(' 今すぐ登録ウィンドウ!' ) 26 SLEEP(1 ) 27 #ユーザー名入力する:username12334 28 driver.find_element_by_id(" TANGRAM__PSP_4__userName ").send_keys(" username12334 " ) 29 #電話を入力すると番号:18877776666 30 driver.find_element_by_id(" TANGRAM__PSP_4__phone ").send_keys(" 18877776666 " ) 31 #パスワード:パスワード 32 driver.find_element_by_id(" TANGRAM__PSP_4__password ").send_keys(" パスワード" ) 33は、 #1 音声認証コードのクリック 34は driver.find_element_by_id(" TANGRAM__PSP_4__verifyCodeSend " ).click() 35 位コード入力:123456 36 driver.find_element_by_id(" TANGRAM__PSP_4__verifyCodeを").send_keys(" 123456 " ) 37 #チェック(読み、受け入れる" Baiduのユーザー契約"と" Baiduのプライバシーステートメント") 38 driver.find_element_by_id("TANGRAM__PSP_4__isAgree " ).click() 39 #登録"ボタンをクリックし、 " 40 driver.find_element_by_id(" TANGRAM__PSP_4__submit " ).click()は 41 位Baiduの検索ウィンドウに戻り 42 用 newhandle にall_handles: 43 のIF newhandle == seach_windows: 44 ドライバー。 switch_to.window(newhandle) 45 印刷(' 今さがすウィンドウ!' ) 46がある (1 SLEEP ) 47 #閉じるログイン/登録の即時ポップ 48 driver.find_element_by_id(" TANGRAM__PSP_4__closeBtn " ).click() 49 #は、Baiduの入力ボックスをクリックして、 "セレンwebdriverを" 50 driver.find_element_by_xpath(' // INPUT [ID = "kWの" @] ' .send_keys()" セレンwebdriverを" ) 51 #"百度が"ボタンをクリックし 52 driver.find_element_by_xpath(' // INPUT [上記は、ID = "SU"を言及@] ' ).click() 53 SLEEP(2 ) 54の #は、すべてのウィンドウを閉じて、ブラウザを終了し、この端部をスクリプトタスク 55 driver.quit()
スクリプトの実行:まず、Baiduのホームページを開き、current_window_handleによって現在のウィンドウのハンドルを取得し、変数seach_windowsに割り当てられた後、このように新規登録ウィンドウを開いて、ログインポップの「今すぐ登録」をクリックし、ログインウィンドウを開きます。window_handlesによって、現在開いているすべてのウィンドウのハンドルを取得し、変数に代入all_handles
newhandle seach_windowsと等しくない場合は、ループを反復処理のall_handlesための最初の、それが理由だけ開いている二つのウィンドウスクリプトの実行中に登録されたウィンドウでなければなりません。したがって、登録ページに切り替えるswitch_to.window(によって作動レジスタ)。同様に第二のループが、この時間newhandle等しいseach_windowsかどうかを決定し、Baiduの検索ページと検索操作に切り替えます。
要約:
current_window_handle:現在のウィンドウのハンドルを取得
window_handles:現在のセッションにすべてのウィンドウのハンドルを返します。
switch_to.window()は()をswitch_to.frameと同様、適切なウィンドウに切り替えるため、前者は異なる形態間で切り替えるために使用されている別のウィンドウ、切り替えるために使用されます。
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------
話は私のコードを表示し、安いです。