Comment Naviguer vers une Nouvelle Page web En Sélénium?
J'ai le code suivant:
driver.get(<some url>)
for element in driver.find_elements_by_class_name('thumbnail'):
element.find_element_by_xpath(".//a").click() #this works and navigates to new page
element.find_element_by_link_text('Click here').click() #this doesn't
Qui doit naviguer dans le code HTML suivant (simplifié de cours) en cliquant sur une miniature, qui dirige vers une nouvelle page, puis de cliquer sur le Click here
lien dans cette nouvelle page:
<!DOCTYPE html>
<html lang="en-US" prefix="og: http://iuytp.me/ns# fb: http://iuytp.me/ns/fb#">
<head>
<meta charset="UTF-8" />
<title>Releases</title>
</head>
<body class="archive category category-releases category-4 custom-background">
<div id="main">
<div id="container" class="one-column">
<div id="content" role="main">
<h1 class="page-title">Releases</h1>
<div id="thumbnail-post-display">
<div id="thumbnail-post" class="post-7158 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-designer category-releases category-uncategorized">
<div class="thumbnail"><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="Permanent link to Designer – 7 inch" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/05/dboypledge32-300x300.png" class="attachment-thumbnail wp-post-image" alt="dboypledge3" /></a></div>
<h2><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="Permanent link to Designer – 7 inch" rel="bookmark">Designer – 7 inch</a></h2>
</div>
</div><!--end thumbnail post display-->
<div id="thumbnail-post-display">
<div id="thumbnail-post" class="post-7107 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
<div class="thumbnail"><a href="http://records.net/releases/people-2014-tour-demos/" title="Permanent link to All My People – 2014 Tour Demos" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/01_Doubt-mp3-image-300x300.png" class="attachment-thumbnail wp-post-image" alt="" /></a></div>
<h2><a href="http://records.net/releases/people-2014-tour-demos/" title="Permanent link to All My People – 2014 Tour Demos" rel="bookmark">All My People – 2014 Tour Demos</a></h2>
</div>
</div><!--end thumbnail post display-->
<div id="thumbnail-post-display">
<div id="thumbnail-post" class="post-7089 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
<div class="thumbnail"><a href="http://records.net/releases/sirens-blossom-talk/" title="Permanent link to Syrins – Boss Talk" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/sirens_final_smaller-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="sirens_final_smaller" /></a></div>
<h2><a href="http://records.net/releases/sirens-blossom-talk/" title="Permanent link to Syrins – Boss Talk" rel="bookmark">Syrins – Boss Talk</a></h2>
</div>
</div><!--end thumbnail post display-->
<div id="thumbnail-post-display">
<div id="thumbnail-post" class="post-7073 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
<div class="thumbnail"><a href="http://records.net/releases/worlds-strongest-man-scares/" title="Permanent link to World’s Tough Man – Sorry Scares You" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/a2312749950_10-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="a2312749950_10" /></a></div>
<h2><a href="http://records.net/releases/worlds-strongest-man-scares/" title="Permanent link to World’s Tough Man – Sorry Scares You" rel="bookmark">World’s Tough Man – Sorry Scares You</a></h2>
</div>
</div><!--end thumbnail post display-->
<div id="thumbnail-post-display">
<div id="thumbnail-post" class="post-7046 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
<div class="thumbnail"><a href="http://records.net/releases/sundog-space-criminal/" title="Permanent link to Dog – Space Criminal" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/Sundog_cover_high_res-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="dog_cover_high_res" /></a></div>
<h2><a href="http://records.net/releases/sundog-space-criminal/" title="Permanent link to Dog – Space Criminal" rel="bookmark">Dog – Space Criminal</a></h2>
</div>
</div><!--end thumbnail post display-->
<div style="clear:both"></div>
</div><!-- #container -->
</div><!-- #main -->
</div><!-- #wrapper -->
</div><!--#bg-wrapper-->
</body>
</html>
Mon code cependant crache le message d'erreur suivant:
Traceback (most recent call last):
...
File "crawler.py", line 17, in main
driver.find_element_by_link_text('Click here').click()
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 254, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 662, in find_element
{'using': by, 'value': value})['value']
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 173, in execute
self.error_handler.check_response(response)
File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: u'no such element\n (Session info: chrome=35.0.1916.153)\n (Driver info: chromedriver=2.10.267517,platform=Mac OS X 10.9.3 x86_64)'
Le problème semble être que l'élément n'a pas été mis à jour avec le contenu de la nouvelle page. Remplacement de la problématique de la ligne element
avec driver
ne fonctionne pas non plus. Ce que je fais mal?
Veuillez noter que je dois être capable de faire cela pour toutes les vignettes (d'où le for
boucle).
S'il vous plaît poster pertinentes du code HTML où vous voulez.
OriginalL'auteur Stunner | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
S'avère que vous avez besoin de stocker les liens que vous souhaitez accédez à l'avance. C'est ce qui a fini par travailler pour moi (trouvé ce fil être utile):
Est-il un moyen de le faire et d'attendre pour javascript être chargés pour chaque page?
Bonne question, malheureusement, je n'ai pas touché le sélénium dans les années donc je ne peux pas vous être d'une quelconque aide.
OriginalL'auteur Stunner
Votre première ligne:
attrape tous les éléments sur la première page. Votre ligne suivante:
transitions à un nouveau page, comme vous l'avez souligné dans votre commentaire. À ce stade,
element
est allé, de sorte que la ligne suivante:n'a aucune chance de faire quelque chose, elle fait référence à quelque chose qui n'est pas là. Ce qui est exactement ce que le
NoSuchElementException
est vous dire.Vous avez besoin pour commencer dès le début, avec quelque chose comme:
Supplémentaires réponse:
Pour résoudre vos itération dilemme, vous pouvez prendre les méthodes suivantes - s'il vous plaît noter que je ne suis pas familier avec la syntaxe de python! Ci-dessous est Groovy syntaxe, vous devrez l'ajuster à Python!
element
variable? Idéalement, je voudrais être en mesure de réaffecter/mettre à jour le pilote de l'objet à être mis à jour avec le contenu de la nouvelle page.Qui sonne comme une question complètement différente. Si vous recherchez pour le web+gratter+python, vous devriez être en mesure d'obtenir de nombreux, beaucoup d'options.
Ce n'est donc pas possible avec le Sélénium? Je dois utiliser une autre bibliothèque comme Belle Soupe pour ce genre de chose? Le sélénium a beaucoup de HTML analyse des fonctions, donc j'espérais que je n'aurais plus qu'à l'utiliser pour mon analyse HTML/navigation besoins.
Tout est possible! Cependant, avec 3,5 k+ rep, vous devriez savoir que votre OP a été répondu, et vous êtes maintenant poser des questions à résoudre un nouveau problème.
Je vous remercie d'essayer de répondre à la question, cependant j'ai besoin de savoir si c'est possible de le faire avec seulement du Sélénium en Python et votre pseudo code n'est pas vraiment utile dans ce cas, compte tenu de l'aide de Sélénium s'appuie fortement sur l'API, il expose et votre pseudo code ne traite pas de cet aspect.
OriginalL'auteur SiKing