Est Sélénium lent, ou est-ce mon code de mal?
Je suis donc en train de se connecter à Quora à l'aide de Python et puis gratter quelques trucs.
Je suis en utilisant le Sélénium pour vous connecter au site. Voici mon code:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get('http://www.quora.com/')
username = driver.find_element_by_name('email')
password = driver.find_element_by_name('password')
username.send_keys('email')
password.send_keys('password')
password.send_keys(Keys.RETURN)
driver.close()
Maintenant, les questions:
- Il a mis environ 4 minutes pour trouver et remplir le formulaire de connexion, lente et douloureuse. Est-il quelque chose que je peux faire pour accélérer le processus?
- Lorsqu'il n'a de connexion, comment puis-je m'assurer qu'il n'y avait pas d'erreurs? En d'autres termes, comment puis-je vérifier le code de réponse?
- Comment puis-je enregistrer des cookies avec du sélénium pour que je puisse continuer de grattage une fois-je me connecter?
- Si il n'y a aucun moyen de faire le sélénium plus rapide, est-il une autre alternative pour la connexion? (Quora ne pas disposer d'une API)
Les lignes qui prennent le temps?
Presque tous d'entre eux. Le navigateur s'ouvre, mais ensuite trouver les champs, et les remplir prend environ une minute chacun.
Oui. Fonctionne très bien sur Google. Doit être un problème de quora.
À l'aide de Quora et la dernière Sélénium API C#, c'est rapide pour moi.
À quelle vitesse? Parce que j'ai essayé sur 3 machines avec l'API Python et c'est tellement lent.
Presque tous d'entre eux. Le navigateur s'ouvre, mais ensuite trouver les champs, et les remplir prend environ une minute chacun.
Oui. Fonctionne très bien sur Google. Doit être un problème de quora.
À l'aide de Quora et la dernière Sélénium API C#, c'est rapide pour moi.
À quelle vitesse? Parce que j'ai essayé sur 3 machines avec l'API Python et c'est tellement lent.
OriginalL'auteur Karan Goel | 2013-07-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire, avec très peu de find_elements_xxx appels en Python sélénium à l'aide de la ChromeDriver. J'ai finalement retrouvé le mal pour un pilote.implicitly_wait() appel que j'ai fait avant mon find_element_xxx() appelle; quand je l'ai pris, mon find_element_xxx() appelle couru rapidement.
Maintenant, je savoir ces éléments étaient là quand j'ai fait la find_elements_xxx() appelle. Donc je ne peux pas imaginer pourquoi les implicit_wait devrait avoir affecté la vitesse de ces opérations, mais il l'a fait.
omg je l'ai mis en test il y a un moment et j'ai oublié qu'il était là. je me demandais pourquoi il est en train de gars de temps à s'exécuter. ty tellement <33333
OriginalL'auteur Polly
J'ai été là, le sélénium est lente. Il peut ne pas être aussi lente que 4 min pour remplir un formulaire. J'ai alors commencé à utiliser phantomjs, ce qui est beaucoup plus rapide que firefox, car il est décapité. Vous pouvez simplement remplacer Firefox() avec PhantomJS() dans le webdriver ligne après l'installation de la dernière phantomjs.
À vérifier que vous disposez de connexion, vous pouvez faire valoir pour certains élément qui s'affiche après la connexion.
Tant que vous ne quittez pas votre pilote, les cookies seront disponibles pour suivre les liens
Vous pouvez essayer d'utiliser urllib et de poster directement le lien de connexion. Vous pouvez utiliser cookiejar à enregistrer des cookies. Vous pouvez même simplement enregistrer le cookie, après tout, un cookie est simplement une chaîne de caractères dans l'entête http
assert "Home" in driver.title
m'a donnéAssertionError
. 4. Je peux essayer que pour vous.Installer la dernière version de phantomjs disponibles par le biais de leur site web, pas de apt-get. version 1.9.1
Oui c'est ce que j'ai fait. Téléchargé la dernière version de leur site web, l'a placé dans le même dossier que mon programme et a obtenu cette erreur. Le fichier que j'ai téléchargé était
phantonjs
(sans extension)Karan, vous devez le placer dans un dossier qui est là dans la variable $PATH. Il peut ne pas fonctionner si vous le placez dans le dossier en cours, à moins que votre $PATH .
OriginalL'auteur manish
Vous pouvez attacher votre remplissage de formulaire à l'aide de votre propre méthode setAttribute, voici le code java pour elle
Vous pouvez exécuter setAttribute(FindBy*****(votre localisateur ici), "valeur", "le Texte que vous voulez mettre dans le champ); et il sera mis l'attribut HTML "valeur" sur le texte que vous voulez remplir le champ. Il y a un timeout sur la send_keys opération, ma méthode contourne cela en faisant en JS-injection dans votre page pour attribuer votre texte dans le champ, ce serait faire très rapidement.
omg super doux!!! je suppose que cela pourrait se faire avec
browser.execute_script(' // javascript goes here ')
avec python??OriginalL'auteur Stormy
Pour Windows 7 et IEDRIVER avec Python, le Sélénium, la Fin de la Ligne de Commande de Windows et redémarrer guéri mon problème.
J'ai eu du mal avec find_element..clics. Ils ont été pris 30 secondes plus un peu. Voici le type de code que j'ai compris la capture de combien de temps à courir.
Qui a été l'enregistrement d'environ 31 secondes pour chaque clic. Après la fin de la ligne de commande et en le redémarrant (ce qui ne signifie la fin de tout IEDRIVERSERVER.exe les processus), il était de 1 seconde par clic.
OriginalL'auteur user3002067
L'exécution de la web pilote headlessly devrait améliorer sa vitesse d'exécution à un certain degré.
OriginalL'auteur Anthony
J'ai changé les locators et cela fonctionne rapidement. Aussi, j'ai ajouté de travail avec les cookies. Vérifiez le code ci-dessous:
Nous avons enregistré des cookies et maintenant, nous allons les appliquer dans une nouvelle fenêtre de navigateur:
D'espoir, cela vous aidera.
OriginalL'auteur Alex Makarenko