0
votes

Comment localiser des éléments via SELENIUM et XPATH

J'essaie donc de supprimer certaines informations d'un site Web, et lorsque j'essaie d'obtenir un élément de XPath, je reçois une erreur "Impossible de localiser l'élément" lorsque le chemin que je fournis est copié directement à partir de l'outil d'inspection. J'ai essayé quelques choses mais cela n'a pas fonctionné, alors je me suis dit que j'allais essayer un chemin plus facile (test) mais je ne travaille toujours pas. Est-il possible que le site Web ne montre pas tout le code HTML lors de l'inspection?

Voici le code, avec le site Web et le XPath que j'ai essayé. P>

def trader_table():

  # Loading Chrome and getting to the website
  driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
  driver.get(URL_TRADER)
  driver.implicitly_wait(10)
  text = driver.find_element_by_xpath(X_PATH).get_attribute('innerHTML')

  return text


2 commentaires

Pouvez-vous spécifier l'élément que vous voulez xpath


Pouvez-vous fournir le code HTML de l'élément exact que vous essayez d'atteindre


4 Réponses :


1
votes

J'ai ajouté une condition d'attente et utilisé une combinaison sélecteur CSS à la place, mais c'est la même chose que votre XPath, je pense

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

url = 'https://www.tipranks.com/analysts/joseph-foresi?benchmark=none&period=yearly'
driver = webdriver.Chrome()
driver.get(url)
data =  WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".client-components-experts-infoTable-expertTable__table .client-components-experts-infoTable-expertTable__dataRow td:nth-child(3)"))).get_attribute('innerHTML')
print(data)


0 commentaires

1
votes

Je suppose que vous recherchez Price code> Ici vous allez.

    from selenium import webdriver
    URL_TRADER = 'https://www.tipranks.com/analysts/joseph-foresi?benchmark=none&period=yearly'

    X_PATH = "//div[@class='client-components-experts-infoTable-expertTable__isBuy']/div/span"


    def trader_table():
     driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
     driver.get(URL_TRADER)
     driver.implicitly_wait(10)
     list_ele= driver.find_elements_by_xpath(X_PATH)
     price_list = []
     for ele in list_ele:
         print(ele.text)
         price_list.append(ele.text)

     return price_list

list=trader_table()
print(list)


5 commentaires

Hey, merci beaucoup! Avez-vous une idée pourquoi le XPath de l'outil d'inspection donnait-il un «mauvais» chemin?


Et comment je devrais modifier le X_Path que vous me fournissez pour obtenir les autres valeurs. J'ai essayé d'utiliser du texte () au lieu de get_attribute ('innerhtml') mais cela ne fonctionne pas


@babas: Esquez-vous des valeurs de prix de toutes les lignes?


Utilisez pilote.find_element_by_xpath (x_path) .text il est imprimé le prix.


@Babas: Consultez mon code mis à jour pour toutes les lignes.I avez pris une liste pour stocker toute la valeur.



0
votes

from selenium import webdriver
import time

driver = webdriver.Chrome("your webdriver location")
driver.get("https://www.tipranks.com/analysts/joseph-foresi?benchmark=none&period=yearly")
time.sleep(10)
y = driver.find_element_by_id('app').get_attribute('innerHTML')
print(y)


0 commentaires

1
votes

Vous avez fourni tous les détails nécessaires à la construction d'une réponse, mais vous n'avez pas mentionné explicitement quel élément vous essayiez d'obtenir .

Cependant, le commenté xpath < / em> dans test nous donne un indice que vous étiez après la cible de prix et d'extraire le texte dans ces éléments, car les éléments sont JavaScript éléments activés, vous devez induire webDriverwait pour le visibilité_of_all_elements_located () < / code> et vous pouvez utiliser la solution suivante:

  • bloc de code: XXX

  • Sortie de la console: XXX


2 commentaires

Excellente réponse et désolé si je n'étais pas totalement clair sur ce qui était mon objectif.


@Babas heureux de pouvoir vous aider. S'il vous plaît accepter la réponse En cliquant sur la marque creuse à côté de ma réponse qui est juste en dessous de la flèche Sweightown , de sorte que la marque TIP est donc "I> Green .