2
votes

Comment trouver un élément contenant une valeur de classe spécifique?

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.


2 commentaires

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


3 Réponses :


1
votes

Vous pouvez utiliser uniquement le sélecteur CSS suivant:

.s-access-detail-page

J'espère que cela vous aidera!


0 commentaires

0
votes

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")


0 commentaires

0
votes

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)


7 commentaires

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 .