Je travaille actuellement sur un programme qui, avec l'aide du webdriver de Selenium et de Firefox, parcourt les domaines, en récupérant tout le texte visible. (programme écrit en python)
Lorsque selenium ouvre des pages avec le javascript window.print()
le crawler est en train de s'arrêter, attendant que je clique manuellement sur "fermer" sur la fenêtre popup qui apparaît.
J'ai essayé le driver.select_pop_up()
après un temps de retard, dans l'espoir de pouvoir fermer() la fenêtre après l'avoir sélectionnée. Cependant, je n'ai pas pu sélectionner la fenêtre.
Je me suis renseigné sur la question, et d'après cette page FAQ sur le sélénium J'en ai conclu que je devais trouver une solution de rechange :
Pour résoudre ce problème, vous pouvez utiliser une solution de contournement (s'il en existe une) ; sinon, vous devrez peut-être exclure le test de votre corpus automatisé.
La seule solution que je vois est de ne pas ouvrir les pages Web dont la description des liens contient le mot "imprimer". Je trouve cependant cette solution peu élégante et j'aimerais savoir si quelqu'un d'autre a une meilleure idée.
Code qui montre un exemple de mon problème :
from selenium import webdriver
import time
skrivutsiden = 'www.alfkvam.no/index.php?id=4849944&cat=159037&printable=1'
vanligside = 'http://www.google.no'
driver = webdriver.Firefox()
driver.get(vanligside)
driver.get(skrivutsiden)
EDIT :
En utilisant le code proposé par prestomanifesto, j'ai effectivement réussi à déclencher une "fenêtre popup d'impression" dans une fenêtre vide de firefox. Lorsque le code produit l'événement que j'essaie d'éviter, je me dis que ce n'est peut-être pas le bon code en premier lieu ? Est-ce une conclusion erronée ? Le code ci-dessous a produit la fenêtre popup :
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.execute_script("window.print() = function() {}")
RE-EDIT :
La raison pour laquelle le code ci-dessus déclenche la fenêtre popup, c'est que je me suis trompé dans le javascript - j'ai écrit
"window.print() = function() {}"
au lieu de
"window.print = function() {}"
Cela n'a pas résolu le problème original, mais cela explique la fenêtre popup inattendue, introduite dans la première édition.
mes excuses presto manifeste
RE-EDIT :
Solutions de mise à jour essayées. J'ai trouvé ce site où j'ai vu la ligne de code suivante proposée :
((JavascriptExecutor)m_driver).executeScript("window.confirm = function(msg){return
false;};");
Sur cette base, j'ai essayé ce qui suit, sans succès :
driver.execute_script("window.print = function(msg) {return false;};")