Comment arrêter le chargement de la page dans firefox par programmation?
Je suis en cours d'exécution plusieurs tests avec WebDriver et Firefox.
Je suis confronté à un problème avec la commande suivante:
WebDriver.get(www.google.com);
Avec cette commande, WebDriver blocs jusqu'à l'événement onload est déclenché. Tandis que ceci peut normalement prend que quelques secondes, ça peut prendre des heures sur des sites web qui ne s'est jamais la fin du chargement.
Ce que je voudrais faire est d'arrêter le chargement de la page après un certain délai d'attente, en quelque sorte, la simulation de Firefox bouton d'arrêt.
J'ai d'abord essayé d'exécuter la suite du code JS à chaque fois que j'ai essayé de chargement d'une page:
var loadTimeout=setTimeout(\"window.stop();\", 10000);
Malheureusement cela ne fonctionne pas, probablement parce que :
En raison de l'ordre dans lequel les scripts sont chargés, la méthode stop() ne peut pas arrêter le document dans lequel il est contenu à partir de chargement Un
Mise à JOUR 1: j'ai essayé d'utiliser SquidProxy afin d'ajouter de la connecter et demander des délais d'attente, mais le problème a persisté.
Une chose bizarre que j'ai trouvé aujourd'hui, c'est que d'un seul site web qui n'a jamais cessé de chargement sur ma machine (FF3.6 - 4.0 et Mac Os 10.6.7) chargé normalement sur d'autres navigateurs et/ou les ordinateurs.
Mise à JOUR 2: Le problème, apparemment, peut être résolu par dire à Firefox de ne pas charger les images. espérons que tout va fonctionner après que...
Je souhaite WebDriver avait une meilleure Chrome pilote pour l'utiliser. Firefox est décevant moi tous les jours!
Mise à JOUR 3: le Sélénium 2.9 ajouté une nouvelle fonctionnalité pour gérer les cas où le pilote s'affiche à accrocher. Ceci peut être utilisé avec FirefoxProfile
comme suit:
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("web");
firefoxProfile.setPreference("webdriver.load.strategy", "fast");
Je vais poster si cela fonctionne après je l'ai essayer.
Mise à JOUR 4: à la fin aucune des méthodes ci-dessus ont travaillé. J'arrive à la fin de "tuer" les discussions qui sont en prenant de temps à se terminer. Je suis de rabotage pour essayer Ghostdriver qui est une Distance WebDriver qui utilise PhantomJS en tant que back-end. PhantomJS est une tête WebKit scriptable, donc je m'attends pas à avoir des problèmes d'un vrai navigateur comme firefox. Pour les personnes qui ne sont pas obliger d'utiliser firefox(ramper fins) je vais mettre à jour avec les résultats
Mise à JOUR 5: Temps pour une mise à jour. À l'aide de 5 mois de la ghostdriver 1.1 au lieu de cela FirefoxDriver je peux dire que je suis vraiment satisfaite de ses performances et de la stabilité. J'ai eu quelques cas où nous n'avons pas le comportement approprié, mais ressemble en général ghostdriver est assez stable. Donc, si vous devez, comme moi, un navigateur pour l'analyse/web scraping, je vous recommandons d'utiliser ghostdriver au lieu de firefox et xvfb qui vous donnera plusieurs maux de tête...
source d'informationauteur ArisRe82
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure d'obtenir autour de ce faire quelques choses.
Tout d'abord, définir un délai d'attente pour le webdriver. E. g.,
Deuxième, lorsque vous faites votre obtenir, l'enrouler autour d'un TimeoutException. (J'ai ajouté un UnhandledAlertException attraper là, juste pour faire bonne mesure.) E. g.,
Fondamentalement essaie de charger la page, mais si elle arrive à expiration, il force la page d'arrêter le chargement à l'aide de javascript, puis tente d'obtenir à nouveau la page. Il pourrait ne pas aider dans votre cas, mais il a certainement aidé dans la mienne, en particulier lorsque l'on fait un webdriver est
getCurrentUrl()
de commande, qui peut aussi prendre trop longtemps, ont une alerte, et d'exiger la page d'arrêter le chargement avant de vous obtenez l'url.J'ai couru dans le même problème, et il n'y a pas de solution générale, il me semble. Il est, cependant, un bug à ce sujet dans leur système de suivi des bogues qui pourraient "star" de voter pour elle.
http://code.google.com/p/selenium/issues/detail?id=687
L'un des commentaires sur ce bug qui est une solution de contournement qui peuvent travailler pour vous - Fondamentalement, il crée un thread qui attend le temps nécessaire, puis tente de simuler appuyant sur la touche échap dans le navigateur, mais qui nécessite la fenêtre du navigateur pour être au premier plan, qui peut être un problème.
http://code.google.com/p/selenium/issues/detail?id=687#c4
Ma solution est l'utilisation de cette classe:
WebDriverBackedSelenium
;Je pense que le problème est étroitement lié à Firefox de bugs. Voir ce blog pour plus de détails. Peut-être que la mise à niveau de FireFox vers la dernière version permettra de résoudre votre problème. De toute façon je veux voir le Sélénium mise à jour qui simule le bouton "stop"...
Bien , le concept suivant travaillé avec moi sur Chrome , essayez le même:
1) Accédez à "about:blank"
2) obtenir de l'élément "body"
3) sur le elemënt , il suffit d'Envoyer les Clés Ësc