Cet article vous apporte des exemples de code sur les fenêtres du navigateur de traitement Python et Selenium. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
La dernière fois, j'ai mentionné le traitement de la boîte contextuelle du navigateur. La fenêtre du navigateur sera également déclenchée pour une raison quelconque, provoquant l'ouverture d'une nouvelle fenêtre par le navigateur. La localisation d'une nouvelle fenêtre est similaire à la localisation d'une boîte contextuelle. Vous devez basculer vers la fenêtre avant de pouvoir l'utiliser.
名称 | 用法 |
---|---|
switch_to.window(window_handle) | 切换窗口 |
current_window_handle | 当前窗口句柄 |
window_handles | 所有窗口句柄 |
close() | 关闭当前窗口 |
quit() | 关闭浏览器 |
window_handle est l'identifiant unique de la fenêtre du navigateur, généralement appelé handle de fenêtre. Ce n'est que grâce à ce handle que vous pouvez changer de fenêtre librement. close() et quit() sont également répertoriés ensemble, soulignant la différence entre fermer la fenêtre et fermer le navigateur.
Utilisons directement la page Web de Baidu comme exemple. Ouvrez une nouvelle fenêtre en cliquant sur « Sécurité du réseau public de Pékin… Non ». fenêtre, puis revenez à la page d'accueil de Baidu.
Nous effectuons deux petits tests :
Ouvrez la page d'accueil de Baidu, nous obtenons d'abord la poignée de fenêtre actuelle, ouvrons une nouvelle fenêtre, récupérons à nouveau la poignée de fenêtre et mettons le deux Les résultats obtenus sont imprimés.
Après avoir fermé la nouvelle fenêtre, le navigateur revient automatiquement à la page d'accueil d'origine de Baidu. À ce moment, utilisez la page d'accueil de Baidu
Dans. Afin d'empêcher les programmes d'être interrompus, utilisez try/sauf/finally pour gérer si nécessaire. Regardons le code et les résultats.
# 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()
Regardons les résultats de l'exécution :
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=...
En repensant au test tout à l'heure, nous avons constaté : 1. Même si une nouvelle fenêtre est ouverte, la fenêtre le handle obtenu est toujours la page d’accueil de Baidu (le handle imprimé deux fois est le même). 2. Après avoir fermé la nouvelle fenêtre, le navigateur affiche la page d'accueil de Baidu par défaut, mais ne peut pas utiliser la page d'accueil de Baidu. Au lieu de cela, une erreur est signalée : il n'y a pas de fenêtre et la fenêtre cible a été fermée. Nous devons revenir à la page d'accueil de Baidu dans le programme avant de pouvoir utiliser les éléments de la page d'accueil ("test" n'a pas été récupéré, mais "tester à nouveau" a été récupéré).
Ce que vous voyez n'est pas nécessairement vrai. À l'exception de la fenêtre affichée lorsque le script ouvre initialement le navigateur, la fenêtre affichée ensuite via une série d'actions (telles que l'ouverture/fermeture du navigateur). fenêtre) ne représente pas Peut être utilisé directement. Avant de positionner chaque élément de la fenêtre, vous devez d'abord utiliser switch_to.window() pour basculer. Le pilote ne sautera pas tout seul.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!