Как мне нажать кнопку, используя Selenium в Python? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь сканировать данные обзора приложения со страницы веб-сайта Google Play, используя Python и Selenium.Здесь я пытаюсь нажать кнопку «Полный обзор», чтобы увидеть весь текст каждого отзыва.

Но я постоянно сталкиваюсь с этими ошибками каждый раз:

ElementNotInteractableException: Message: element not interactable

или

AttributeError: 'list' object has no attribute 'click'

или

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".LkLjZd ScJHi OzU4dc  "}

Элемент для кнопкиэто:

<button class="LkLjZd ScJHi OzU4dc  " jsaction="click:TiglPc" jsname="gxjVle">Full Review</button>

Xpath для кнопки такой:

//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/div[26]/div/div[2]/div[2]/span[1]/div/button

И вот код, который я использую для xpath:

full_review = driver.find_elements_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div/div[26]/div/div[2]/div[2]/span[1]/div/button')
full_review.click()

Я не могу найти кнопку по имени класса, xpath или что-то еще.Может ли кто-нибудь помочь мне разобраться с этой проблемой?Кроме того, возможно ли найти элемент по jsname?Буду очень признателен, если вы поможете.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

По возможности избегайте использования xpath, это самый хрупкий селектор.

id> CSS> Xpath

Для вашей кнопки этот css-селектор должен работать:

button[jsname='gxjVle']

Вам, вероятно, нужно будет указать ребенка, поскольку он, вероятно, не будет уникальным

0 голосов
/ 11 июля 2019
  1. Ваш XPath-селектор немного ненадежен, вы можете упростить его до следующего вида:

    //button[text()='Full Review']
    
  2. Вы используете неправильную функцию, если выищите один уникальный элемент, который вы должны использовать WebDriver.find_element_by_xpath один, помните, что element, а не elements
  3. Лучше использовать Явное ожидание на всякий случай элемент не сразу доступен в DOM (например, если вы тестируете приложение, созданное с использованием технологии AJAX )

Принимая все вышеперечисленное:

full_review = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Full Review']")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...