1
votes

Impossible de localiser un bouton utilisant du sélénium pour appuyer dessus

J'ai créé un script en python utilisant du sélénium pour cliquer sur un bouton like disponible dans un page Web . J'ai utilisé xpath pour localiser ce bouton et je pense que je l'ai utilisé correctement. Cependant, le script ne semble pas trouver ce bouton et, par conséquent, il renvoie une erreur TimeoutException pointant sur la ligne même contenant le xpath.

Comme il n'est pas possible d'appuyer sur ce bouton similaire sans se connecter, je m'attends à ce que le script connecte le code HTML correspondant à ce bouton afin que je comprenne que je puisse le localiser correctement.

J'ai essayé avec:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://www.instagram.com/p/CBi_eIuAwbG/"

with webdriver.Chrome() as driver:
    wait = WebDriverWait(driver,10)

    driver.get(link)
    item = wait.until(EC.visibility_of_element_located((By.XPATH,"//button[./svg[@aria-label='Like']]")))
    print(item.get_attribute("innerHTML"))

Comment puis-je localiser ce bouton like visible comme symbole du cœur en utilisant du sélénium?


1 commentaires

Notez la balise svg


3 Réponses :


-1
votes

Essayez d'utiliser la méthode .find_element_by_xpath (xPath) (Utilise un xpath complet):

likeXPATH = "/html/body/div[1]/section/main/div/div[1]/article/div[2]/section[1]/span[1]/button"

likeElement = driver.find_element_by_xpath(likeXPATH)

likeElement.click()


1 commentaires

Désolé @Xiddoc, je ne suis pas après xpath absolu que je pourrais copier directement tout en inspectant l'élément. J'essaye d'en créer un relatif. Merci.



1
votes

Vous pouvez le faire comme ceci

likeSVG = driver.find_element(By.CSS_SELECTOR, 'svg[aria-label="Like"]')
likeBtn = likeSVG.find_element(By.XPATH, './..')
likeBtn.click()

likeBtn est égal au parent du div likeSVG car vous pouvez utiliser XPATH similaire pour classer les commandes de navigation dans une CLI.


1 commentaires

Votre solution fonctionne @Lucan. Je vais sûrement y aller à moins que j'obtienne une solution liée à xpath. Cela mérite sûrement un plus. Merci.



1
votes

Cliquer sur le bouton Like induire WebDriverWait () et attendre visibilité_of_element_located () et sous xpath .

Ensuite, faites défiler l'élément dans la vue et cliquez.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


driver.get("https://www.instagram.com/p/CBi_eIuAwbG/")
element=WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,"//button[.//*[name()='svg' and @aria-label='Like']]")))
element.location_once_scrolled_into_view
element.click()


0 commentaires