Le script ne parvient pas à trouver l'élément si la classe contient plus de valeurs dans la classe. Par exemple cette classe:
a-link-normal a-text-normal
Je veux trouver cet élément uniquement en utilisant la classe - s-access-detail-page .
En recherchant un élément comme celui-ci, j'obtiens une erreur indiquant que l'élément n'est pas trouvé:
find_element_by_css_selector("a[class*='s-access-detail-page']")
Même chose si je recherche un élément avec une classe qui contient:
<a class="a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal">
classe sur la page:
L'URL d'analyse est Amazon: https://www.amazon.com/s?k=smart+watches&page=1
besoin d'obtenir les URL des produits.
3 Réponses :
Vous pouvez utiliser uniquement le sélecteur CSS suivant:
.s-access-detail-page
J'espère que cela vous aidera!
Essayez l'une de ces solutions. Cela devrait fonctionner.
find_element_by_css_selector("a.s-color-twister-title-link")
OU
find_element_by_css_selector("a.s-access-detail-page")
OU
find_element_by_css_selector(".a-link-normal")
Assurez-vous d'avoir une attente et vous pouvez utiliser un simple sélecteur de classe
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
url = 'https://www.amazon.com/s?k=smart+watches&page=1'
d = webdriver.Chrome()
d.get(url)
links = WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".s-access-detail-page")))
linkUrls = [link.get_attribute('href') for link in links]
print(linkUrls)
J'ai utilisé sleep (10_ avant le chargement du contenu, mais avec la fonction d'attente de sélénium, j'obtiens TimeoutException File "C: \ Python36 \ lib \ site-packages \ selenium \ webdriver \ support \ wa it.py", ligne 80, jusqu'à lever TimeoutException (message, écran, stacktrace) selenium.common.exceptions.TimeoutException: Message:
Avez-vous utilisé mon code comme indiqué ci-dessus? il a couru pour moi. Vous pouvez toujours prolonger l'attente de 10 à 20.
oui, votre code fonctionne, mais une seule chose. Il trouve tous les liens sur la page mais j'ai besoin d'une recherche dans le bloc spécifique, donc je recherche dans li.-result-item
D'accord. modifiez le sélecteur. Je ne peux pas voir le sélecteur modifié proposé comme valide pour la page. Vous vouliez récupérer des hyperliens avec la classe ..s-access-detail-page. Pouvez-vous donner un exemple de valeur d'url que vous vous attendez à récupérer.
Je recherche des liens dans cet élément au lieu de` dans votre code, je passe chaque élément li qui se trouve sur la page. Après avoir itéré sur 3 éléments, j'obtiens TimeoutException. Voici comment procéder: pastebin.com/PsXcyDdb
Vous pouvez utiliser .AdHolder .s-access-detail-page
continuons cette discussion dans le chat .
Pouvez-vous partager l'url ou plus du code HTML? Cela fonctionne-t-il si vous utilisez toutes les classes du sélecteur? Avez-vous vérifié qu'il n'y a pas de problème de synchronisation ou de frame / iframe parent? Vous pouvez également utiliser find_element_by_css_selector ("a.s-access-detail-page")
il n'y a pas d'iframe et oui si je spécifie la classe complète, cela fonctionne