Je souhaite fermer tous les onglets ouverts (fenêtres du navigateur) sans fermer le pilote, car je souhaite continuer à l’utiliser.

driver.close() fermera simplement l'onglet ciblé.
driver.quit() les fermera tous mais aussi quittera le pilote.

J'ai pensé à utiliser driver.quit() puis à rouvrir le pilote. Mais cela ne semble pas très propre. Ou peut-être que c'est super propre, mais aussi lent à faire.

Remarque : utilisation de Firefox via geckodriver

Comment puis-je aborder cela?

2
Álvaro N. Franz 17 juil. 2017 à 13:09

2 réponses

Meilleure réponse

Vous pouvez fermer les onglets en envoyant ctrl + w à la page jusqu'à ce qu'il ne reste plus d'onglets. Gardez une trace du nombre d'onglets que vous avez ouverts et utilisez une boucle pour les fermer

from selenium.webdriver.common.keys import Keys

num_of_tabs = ...
for x in range(1, num_of_tabs):
    self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 'W')

Cela fermera tous les onglets sauf un. La fermeture du dernier ne fermera pas le driver, mais vous ne pourrez pas l'utiliser.

4
Guy 17 juil. 2017 à 10:38

Des poignées de fenêtre peuvent également être utilisées pour cela. Parcourez toutes les fenêtres ouvertes et fermez-les:

for handle in driver.window_handles:
    driver.switch_to.window(handle)
    driver.close()

Cela devrait fermer toutes les fenêtres du navigateur.

0
Krzysztof 17 janv. 2019 à 17:49