Heim  >  Artikel  >  Backend-Entwicklung  >  Codebeispiele für Python und Selenium zur Verarbeitung von Browserfenstern

Codebeispiele für Python und Selenium zur Verarbeitung von Browserfenstern

不言
不言nach vorne
2018-10-27 16:15:265288Durchsuche

Dieser Artikel enthält Codebeispiele zur Python- und Selenium-Verarbeitung von Browserfenstern. Ich hoffe, dass er Ihnen weiterhilft.

Das letzte Mal habe ich die Verarbeitung des Browser-Popup-Fensters erwähnt. Aus irgendeinem Grund wird auch das Browserfenster ausgelöst, wodurch der Browser ein neues Fenster öffnet. Das Auffinden eines neuen Fensters ähnelt dem Auffinden eines Popup-Fensters. Sie müssen zu dem Fenster wechseln, bevor Sie es bedienen können.

Browserfensterbezogene API

名称 用法
switch_to.window(window_handle) 切换窗口
current_window_handle 当前窗口句柄
window_handles 所有窗口句柄
close() 关闭当前窗口
quit() 关闭浏览器

window_handle ist die eindeutige Kennung des Browserfensters, im Allgemeinen als Fensterhandle bezeichnet. Nur über dieses Handle können Sie Fenster frei wechseln. close() und quit() werden ebenfalls zusammen aufgeführt, was den Unterschied zwischen dem Schließen des Fensters und dem Schließen des Browsers hervorhebt.

Beispiel

Lassen Sie uns direkt die Webseite von Baidu als Beispiel verwenden, indem Sie unten auf der Baidu-Homepage auf „Peking Public Network Security...Nein“ klicken Öffnen Sie das neue Fenster und kehren Sie dann zur Baidu-Homepage zurück.

Wir führen zwei kleine Tests durch:

  • Öffnen Sie die Baidu-Homepage, wir holen uns zuerst das aktuelle Fensterhandle, öffnen ein neues Fenster, holen uns das Fensterhandle erneut und setzen das 2 Die erhaltenen Ergebnisse werden ausgedruckt.

  • Nach dem Schließen des neuen Fensters wechselt der Browser automatisch zurück zur ursprünglichen Baidu-Homepage. Bedienen Sie zu diesem Zeitpunkt die Baidu-Homepage

In Um Programmunterbrechungen zu verhindern, verwenden Sie bei Bedarf try/exclusive/finally, um dies zu beheben. Schauen wir uns den Code und die Ergebnisse an.

# 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()

Werfen wir einen Blick auf die Ausführungsergebnisse:

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=...

Im Rückblick auf den Test gerade haben wir Folgendes festgestellt: 1. Selbst wenn ein neues Fenster geöffnet wird, bleibt der erhaltene Fenstergriff bestehen das Handle der Baidu-Homepage (gedruckt Das Handle ist zweimal gleich). 2. Nach dem Schließen des neuen Fensters zeigt der Browser standardmäßig die Baidu-Homepage an, kann die Baidu-Homepage jedoch nicht bedienen. Stattdessen wird ein Fehler gemeldet: Es gibt kein Fenster und das Zielfenster wurde geschlossen. Wir müssen im Programm wieder auf die Baidu-Homepage wechseln, bevor wir die Elemente der Homepage bedienen können („test“ wurde nicht abgerufen, aber „test again“ wurde abgerufen).

Zusammenfassung

Was Sie sehen, ist nicht unbedingt wahr, mit Ausnahme des Fensters, das angezeigt wird, wenn das Skript zum ersten Mal den Browser öffnet, das Fenster, das anschließend durch eine Reihe von Aktionen (z. B. Öffnen/Schließen) angezeigt wird Fenster) stellt keine direkte Bedienung dar. Bevor Sie jedes Fensterelement positionieren, müssen Sie zunächst switch_to.window() zum Umschalten verwenden. Der Treiber springt nicht von selbst.

Das obige ist der detaillierte Inhalt vonCodebeispiele für Python und Selenium zur Verarbeitung von Browserfenstern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen