Exemples de code pour Python et Selenium pour traiter les fenêtres du navigateur

不言
Libérer: 2018-10-27 16:15:26
avant
5345 Les gens l'ont consulté

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.

API liée à la fenêtre du navigateur

名称 用法
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.

Exemple

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()
Copier après la connexion

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=...
Copier après la connexion

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é).

Résumé

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal