Donc j'essaye actuellement de trouver tous les liens src parmi une liste de divs générés. Le problème est qu'il partage le même nom de classe et la même balise alt que les autres éléments de la page, donc je suis bloqué en utilisant le xpath. Mais lorsque j'essaie de l'utiliser, je suis limité à ne renvoyer que la valeur indexée dans le xpath. Par exemple div [3]. Comment pourrais-je trouver tous les éléments div [1-inf] et pas seulement un élément spécifique? J'ai découvert position () comme paramètre mais je n'ai pas eu beaucoup de chance pour le faire fonctionner. Peut-être que je ne l'utilise pas correctement. driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div[3]/a/img").get_attribute('src')

<div style="display:inline-block">
    <a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561197969720703">
    <img class="Avatar" alt="avatar" title="ArieBier | 2015-09-16 18:20:58" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/df/dfd267c19d759f730e1051ae4657d0100a6b6c0d.jpg">
    </a>                                    
</div>
<div style="display:inline-block">
<a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561198136313290">
<img class="Avatar" alt="avatar" title="by | 2015-09-17 02:53:25" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/5d/5d4c06db9ba89f8a945108af10075ebd348cd1ae.jpg">
</a>                                    
</div>
<div style="display:inline-block">
    <a target="_blank" title="Inventory Profile" href="http://csgo.exchange/profiles/76561198152970370">
    <img class="Avatar" alt="avatar" title="Marn | 2015-10-05 14:40:37" style="width:32px;height:32px" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/ae/ae7878915405c9ad622c9d7fc3b52f3b71ed140a.jpg">
    </a>                                    
</div>

Ce que j'ai déjà essayé.

driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div/a/img"[position() < 1000]).get_attribute('src')
driver.find_elements_by_xpath("//*[@id='tab-history-flow']/div[position() < 1000]/a/img").get_attribute('src')
0
CodeOrDie 17 mars 2019 à 07:14

2 réponses

Meilleure réponse

Pour imprimer tous les src attributs, vous pouvez utiliser l'un des Stratégies de localisation :

  • En utilisant CSS_SELECTOR:

    print([element.get_attribute('src') for element in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "#tab-history-flow a[title='Inventory Profile']>img.Avatar[alt='avatar']")))])
    
  • En utilisant XPATH:

    print([element.get_attribute('src') for element in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@id='tab-history-flow']//a[@title='Inventory Profile']/img[@class='Avatar' and @alt='avatar']")))])
    
  • Remarque : vous devez ajouter les importations suivantes:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
1
DebanjanB 17 mars 2019 à 20:56

Eh bien, je ne vois aucun élément dont l'identifiant est beaucoup moins celui que vous avez spécifié, donc je ne sais pas exactement pourquoi cela ne fonctionne pas. Cependant, je pense que cela pourrait être accompli assez facilement. J'ai remarqué que toutes les balises img dans le code HTML que vous avez collé dans votre question ont class="Avatar". Voici comment j'obtiendrais les sources d'images:

images = driver.get_elements_by_css_selector('#tab-history-flow > div > a > img')
for image in images:
    image = image.get_attribute(src)

Cela devrait transformer images en un tableau contenant toutes vos sources d'images. Faites-moi savoir si cela aide / n'aide pas.

Avertissement: je n'ai pas vu l'intégralité de votre page HTML, le sélecteur que j'ai utilisé peut donc ne pas fonctionner. maintenant je l'ai, et je pense que le code devrait fonctionner pour vous.

2
C. Peck 17 mars 2019 à 07:29