Réglage de la temporisation sur selenium webdriver.PhantomJS
La situation
J'ai un simple script python pour obtenir le source HTML pour une url donnée:
browser = webdriver.PhantomJS()
browser.get(url)
content = browser.page_source
Parfois, l'url pointe vers une page avec la lenteur de chargement de ressources externes (par exemple, des fichiers vidéo, ou vraiment lent contenu de la publicité).
Webdriver va attendre jusqu'à ce que ces ressources sont chargées avant de remplir le .get(url)
demande.
Remarque: Pour des raisons étrangères, j'ai besoin de faire cela avec PhantomJS plutôt que requests
ou urllib2
La question
Je voudrais définir un délai d'attente sur PhantomJS de chargement de ressources, de sorte que si la ressource est trop long à charger, le navigateur juste suppose qu'il n'existe pas ou que ce soit.
Cela me permettrait d'effectuer ensuite les .pagesource
requête basée sur ce que le navigateur a chargé.
La Documentation sur webdriver.PhantomJS est très mince, et je n'ai pas trouvé une question semblable sur.
merci d'avance!
OriginalL'auteur tohster | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
PhantomJS a fourni
resourceTimeout
, qui pourrait répondre à vos besoins. Je cite à partir de la documentation iciDonc en Ruby, vous pouvez faire quelque chose comme
Je crois en Python, c'est quelque chose comme (non testé, permet uniquement de la logique, vous êtes le développeur Python, je l'espère, vous permettra de comprendre)
Je suis cette et encore voir des ressources de délais d'attente -- c'est avec le sélénium (via python) et phantomjs 1.9.7.
Je suis en train de le faire fonctionner sur Python aussi Adam. pas beaucoup de savoir. stackoverflow.com/questions/23177659/...
OriginalL'auteur Yi Zeng
Longue Explication ci-dessous, afin de TLDR:
Version actuelle de Sélénium Ghostdriver (en PhantomJS 1.9.8) ignore resourceTimeout option, utilisez webdriver est implicitly_wait(), set_page_load_timeout() et de les emballer sous try-except bloc.
Explication
De fournir PhantomJS les paramètres de la page le Sélénium, on peut utiliser webdriver est DesiredCapabilities tels que:
Mais, le hic, c'est Qu'aujourd'hui (2014/Dec/11) avec PhantomJS 1.9.8 et embarqué Ghostdriver, resourceTimeout ne sera pas appliqué par Ghostdriver (Voir la Ghostdriver question n ° 380 de Github).
Pour une solution, il suffit d'utiliser le Sélénium du délai d'expiration des fonctions/méthodes et les envelopper webdriver de la méthode d'obtenir un essayez-à l'exception de/bloc try-catch, par exemple
OriginalL'auteur EwyynTomato