Localiser un élement avec sélenium
Résolu/Fermé
A voir également:
- Localiser ip python
- Ethernet n'a pas de configuration ip valide - Guide
- Localiser adresse ip gratuit - Guide
- Comment connaître son adresse ip - Guide
- Localiser une adresse mail gratuitement - Guide
- Ip local - Guide
2 réponses
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
Ambassadeur
1 551
3 avril 2021 à 17:27
3 avril 2021 à 17:27
bonjour,
tu n'expliques pas comment se comporte ton programme.
tu n'expliques pas comment se comporte ton programme.
Bonjour yg_be,
Oui ne t'en fais pas je connais la différence, j'ai même réussi à résoudre le problème. Toutefois, j'aurais une autre question a te poser. Dans mon code, j'ai besoin de répeter l'action qui récupère les liens href pour chaque changement de pages. Cependant je galère pour récupérer le nombre de pages. J'ai d'ailleurs essayé la fonction "find_element_by_tag_name" ou encore la fonction "to_left_of", mais aucune n'ont fonctionné.
Et je narrive également pas à faire la boucle en question pour relancer la fonction.
Aurais-tu des solutions ?
Voici le code :
et le code qui essaye de recupérer le nombre de pages avec l'erreur qu'il renvoie :
Oui ne t'en fais pas je connais la différence, j'ai même réussi à résoudre le problème. Toutefois, j'aurais une autre question a te poser. Dans mon code, j'ai besoin de répeter l'action qui récupère les liens href pour chaque changement de pages. Cependant je galère pour récupérer le nombre de pages. J'ai d'ailleurs essayé la fonction "find_element_by_tag_name" ou encore la fonction "to_left_of", mais aucune n'ont fonctionné.
Et je narrive également pas à faire la boucle en question pour relancer la fonction.
Aurais-tu des solutions ?
Voici le code :
import selenium from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.keys import Keys import time driver = webdriver.Firefox() driver.get('https://www.pagesjaunes.fr/') inputElems = driver.find_elements( By.ID, "quoiqui" ) for inputElem in inputElems: inputElem.send_keys('métallurgie') inputElem.send_keys(Keys.ENTER) time.sleep(4) inputElemz = driver.find_elements( By.ID, "ou" ) for inputElemt in inputElemz: inputElemt.send_keys('Lyon') inputElemt.send_keys(Keys.ENTER) time.sleep(7) recherche = driver.find_element_by_xpath('//button[@type="submit"]') recherche.click() time.sleep(5) nombre_de_pages = driver.find_element_by_xpath("//strong") x = nombre_de_pages #faire une boucle pour répeter le changement de pages page_suivante = driver.find_element( By.ID, "pagination-next" ) page_suivante.click() time.sleep(10) continue_link = driver.find_elements_by_tag_name('a') elems = driver.find_elements_by_xpath("//*[@href]") values = [""] for elem in elems: values.append(elem.get_attribute("href")) print(values) driver.close()
et le code qui essaye de recupérer le nombre de pages avec l'erreur qu'il renvoie :
driver = webdriver.Firefox() driver.get("https://www.pagesjaunes.fr/annuaire/chercherlespros?quoiqui=m%C3%A9tallurgie&ou=Lyon") time.sleep(10) boutton_suivant = driver.find_element_by_tag_name('a') boutton_suivant_id = driver.find_element(By.ID, "pagination-next") nombre_de_pages = driver.find_element(with_tag_name('strong'). to_left_of(boutton_suivant_id)) print(nombre_de_pages) driver.close()
Traceback (most recent call last):
File "C:/Users/dell/Documents/test2.py", line 26, in <module>
nombre_de_pages = driver.find_element(with_tag_name('strong').
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 319, in execute
response = self.command_executor.execute(driver_command, params)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\remote_connection.py", line 372, in execute
data = utils.dump_json(params)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\remote\utils.py", line 33, in dump_json
return json.dumps(json_struct)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\dell\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type RelativeBy is not JSON serializable
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
1 551
4 avril 2021 à 22:31
4 avril 2021 à 22:31
qu'appelles-tu un "changement de page"?
pourquoi montres-tu un code complet, et puis quelques lignes de code?
chez moi, le code s'exécute sans erreur.
je me demande si tu as compris à quoi servait find_element().
que penses-tu obtenir en faisant :
pourquoi montres-tu un code complet, et puis quelques lignes de code?
chez moi, le code s'exécute sans erreur.
je me demande si tu as compris à quoi servait find_element().
que penses-tu obtenir en faisant :
nombre_de_pages = driver.find_element?
Enygma
>
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
Modifié le 5 avril 2021 à 11:40
Modifié le 5 avril 2021 à 11:40
Effectivement tu a raison le nombre de page n'est pas un élément donc on ne peux l'obtenir avec un
Mais dans se cas la comment faire ?
Et se que j'entend par "changement de page" c'est
Le passage du site internet (pages d'accueil ou autre) a une autre pages du site (boutique ou autre).
Ex on est sur le site leboncoin dans la catégorie vélo et on arrive en bas de la page et on veux continuer de regarder les annonce donc on clique sur suivant et on arrive sur la page 2.
Voila se que j'appelle "changement de page"
Les lignes de code concerné sont les lignes 7 et 8 du deuxième script que j'ai envoyé.
Et en faisant
J'espère que sa sera pas trop dure à comprendre :)
Cdlt
driver.find_element, a moins que je me trompe.
Mais dans se cas la comment faire ?
Et se que j'entend par "changement de page" c'est
Le passage du site internet (pages d'accueil ou autre) a une autre pages du site (boutique ou autre).
Ex on est sur le site leboncoin dans la catégorie vélo et on arrive en bas de la page et on veux continuer de regarder les annonce donc on clique sur suivant et on arrive sur la page 2.
Voila se que j'appelle "changement de page"
Les lignes de code concerné sont les lignes 7 et 8 du deuxième script que j'ai envoyé.
Et en faisant
nombre_de_pages = driver.find_elementsje pensais obtenir la balise "strong" qui contient le nombre de pages.
J'espère que sa sera pas trop dure à comprendre :)
Cdlt
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
1 551
>
Enygma
5 avril 2021 à 13:10
5 avril 2021 à 13:10
quel est le lien entre les deux codes?
le second code est-il complet?
tu as assez confus: tu montres un code qui analyse les pages jaunes, et tu donnes une explication avec un autre site, le bon coin.
il serait utile que tu donnes un exemple de ce que tu veux récupérer comme information.
si tu veux compter les pages, n'est-ce pas plus simple de compter le nombre de fois que tu as cliqué sur "suivant"?
peut-être:
en ajoutant peut-être ceci:
le second code est-il complet?
tu as assez confus: tu montres un code qui analyse les pages jaunes, et tu donnes une explication avec un autre site, le bon coin.
il serait utile que tu donnes un exemple de ce que tu veux récupérer comme information.
si tu veux compter les pages, n'est-ce pas plus simple de compter le nombre de fois que tu as cliqué sur "suivant"?
peut-être:
elspan = driver.find_element(By.ID, "SEL-compteur") print(elspan.get_attribute("textContent"))
en ajoutant peut-être ceci:
elstrong = elspan.find_element_by_tag_name('strong') print(elspan.get_attribute("textContent"))
Enygma
>
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
5 avril 2021 à 15:33
5 avril 2021 à 15:33
Merci du conseil tout fonctionne nickel maintenant !
et non le deuxième code n'est pas complet c'était juste pour faire des tests.
Toutefois serais tu comment faire exectuter a une boucle while des variable et une fonction.
En gros pour que se sois plus compréhensible je voudrais réxecuter le code de la ligne 5 a la ligne 12 avec la boucle while mais je ne sais pas comment faire.
et non le deuxième code n'est pas complet c'était juste pour faire des tests.
Toutefois serais tu comment faire exectuter a une boucle while des variable et une fonction.
En gros pour que se sois plus compréhensible je voudrais réxecuter le code de la ligne 5 a la ligne 12 avec la boucle while mais je ne sais pas comment faire.
deconte_de_page = 0 while deconte_de_page < nombre_de_page: deconte_de_page += 1 #faire une boucle pour répeter le changement de pages page_suivante = driver.find_element( By.ID, "pagination-next" ) page_suivante.click() time.sleep(10) continue_link = driver.find_elements_by_tag_name('a') elems = driver.find_elements_by_xpath("//*[@href]") values = [""] for elem in elems: values.append(elem.get_attribute("href"))
yg_be
Messages postés
23309
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 novembre 2024
1 551
>
Enygma
5 avril 2021 à 15:46
5 avril 2021 à 15:46
peut-être ainsi?
decompte_de_page = 0 values = [""] while decompte_de_page < nombre_de_page: decompte_de_page += 1 #faire une boucle pour répeter le changement de pages page_suivante = driver.find_element_by_id("pagination-next") page_suivante.click() time.sleep(10) continue_link = driver.find_elements_by_tag_name('a') elems = driver.find_elements_by_xpath("//*[@href]") for elem in elems: values.append(elem.get_attribute("href"))
3 avril 2021 à 17:34