Не могу найти кнопку, используя селен, чтобы нажать на нее - PullRequest
1 голос
/ 18 июня 2020

Я создал сценарий на python, используя селен, чтобы щелкнуть кнопку , доступную на веб-странице . Я использовал xpath, чтобы найти эту кнопку, и думаю, что использовал ее правильно. Однако сценарий, похоже, не находит эту кнопку и в результате выдает ошибку TimeoutException, указывающую на ту самую строку, содержащую xpath.

Поскольку невозможно нажать эту кнопку Like без входа в систему, я ожидаю, что скрипт подключит соответствующий html к этой кнопке, чтобы я понял, что могу найти его правильно.

Я пробовал с:

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

Как мне найти эту like кнопку, видимую как heart symbol, используя селен?

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Вы можете сделать это так:

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

likeBtn равно родительскому элементу likeSVG div, поскольку вы можете использовать XPATH аналогично командам навигации по файлам в CLI.

1 голос
/ 18 июня 2020

Чтобы нажать на Like кнопку, вызвать WebDriverWait () и дождаться visibility_of_element_located () и ниже xpath.

Затем прокрутите элемент в поле зрения и щелкните.

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 голосов
/ 18 июня 2020

Попробуйте использовать метод .find_element_by_xpath(xPath) (использует полный xpath):

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()
...