ホームページ  >  記事  >  バックエンド開発  >  ブラウザウィンドウを処理するための Python と Selenium のコード例

ブラウザウィンドウを処理するための Python と Selenium のコード例

不言
不言転載
2018-10-27 16:15:265338ブラウズ

この記事では、Python と Selenium のブラウザ ウィンドウの処理に関するコード例を紹介します。これには特定の参考値があります。必要な友人は参照できます。役立つことを願っています。役に立ちます。

前回、ブラウザのポップアップボックスの処理について触れましたが、何らかの理由でブラウザのウィンドウも起動され、ブラウザが新しいウィンドウを開きます。新しいウィンドウを見つけることは、ポップアップ ボックスを見つけることと似ており、操作する前にウィンドウに切り替える必要があります。

ブラウザ ウィンドウ関連の API

# #switch_to.window(window_handle)ウィンドウを切り替えるcurrent_window_handle現在のウィンドウ ハンドル window_handles すべてのウィンドウ ハンドルclose()現在のウィンドウを閉じる##quit()##window_handle はブラウザ ウィンドウの一意の識別子であり、一般にウィンドウ ハンドルと呼ばれます。このハンドルを介してのみ、ウィンドウを自由に切り替えることができます。 close() と quit() も一緒にリストされており、ウィンドウを閉じることとブラウザを閉じることの違いを強調しています。
名前 使用法
ブラウザを閉じる

例として、Baidu の Web ページを直接使用します。Baidu のホームページの下部にある「Beijing Public Network Security...No.」をクリックして新しいウィンドウを開き、新しいウィンドウを閉じます。をクリックして、Baidu のホームページに戻ります。

我々は 2 つの小さなテストを行います:

Baidu ホームページを開き、まず現在のウィンドウ ハンドルを取得し、新しいウィンドウを開いた後、再度ウィンドウ ハンドルを取得して、 2 つ 得られた結果が印刷されます。
  • 新しいウィンドウを閉じると、ブラウザは自動的に元の百度ホームページに戻ります。このとき、百度ホームページを操作してください。プログラムの中断を防ぐために、必要に応じて try/excel/finally を使用して処理します。コードと結果を見てみましょう。
  • # coding = utf-8
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get('https://www.baidu.com')
    
    first_window_handle = driver.current_window_handle #获取当前(百度首页)的窗口句柄
    print('now handle is : ',first_window_handle) #打印百度首页窗口句柄
    
    driver.find_element_by_id('jgwab').click() #点击打开新窗口
    second_window_handle = driver.current_window_handle #再获取一次窗口句柄并打印
    print('and now handle is : ', second_window_handle) 
    all_handles = driver.window_handles #获取所有窗口句柄
    sleep(2)
    for window in all_handles:
        if window != first_window_handle:
            print('and and now handle is : ', window)
            driver.switch_to.window(window) #切换到非百度首页的窗口
            driver.close() #关闭该窗口
    sleep(2)
    
    try:
        driver.find_element_by_id('kw').send_keys('test') #关闭窗口后操作百度首页元素
        driver.find_element_by_id('su').click()
    except Exception as msg:
        print('error: ', msg) #如果有错误,打印错误信息
    finally:
        driver.switch_to.window(first_window_handle) #切换到百度首页后再操作
        driver.find_element_by_id('kw').send_keys('try again')
        driver.find_element_by_id('su').click()
        sleep(2)
        driver.quit()
  • 実行結果を見てみましょう:

    now handle is :  CDwindow-6CF04CE58FCA5EA42EC453509FFDF773
    and now handle is :  CDwindow-6CF04CE58FCA5EA42EC453509FFDF773
    and and now handle is :  CDwindow-C6EDDF33CAA9BC9330585B2DCB8A664B
    error:  Message: no such window: target window already closed
    from unknown error: web view not found
      (Session info: chrome=69.0.3497.92)
      (Driver info: chromedriver=...

    先ほどのテストを振り返ると、 1. 新しいウィンドウを開いたとしても、取得されたウィンドウ ハンドルはそのままです。 Baidu ホームページのハンドル (同じハンドルが 2 回印刷されています)。 2. 新しいウィンドウを閉じると、ブラウザにはデフォルトで Baidu ホームページが表示されますが、Baidu ホームページを操作することはできず、代わりに「ウィンドウが存在せず、ターゲット ウィンドウが閉じられました」というエラーが報告されます。ホームページの要素を操作するには、プログラム内で Baidu ホームページに戻る必要があります (「テスト」は取得されませんでしたが、「再テスト」は取得されました)。
概要

表示されている内容は必ずしも真実ではありません。スクリプトが最初にブラウザを開いたときに表示されるウィンドウを除き、その後の一連のアクション (ブラウザの開閉など) によって表示されるウィンドウは、 window) を表すものではありません。直接操作できます。各ウィンドウ要素を配置する前に、まず switch_to.window() を使用して切り替える必要があります。ドライバーは単独ではジャンプしません。

以上がブラウザウィンドウを処理するための Python と Selenium のコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。