Текст класса захвата - Selenium Python - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь зафиксировать элемент веб-страницы, используя селен в python

<span class="_2-1_O"><span dir="auto" class="_1jlxc _3Whw5">Ana Smith</span></span>

Я пытаюсь зафиксировать имя Ана Смит в Phyton:

nome_contato =  driver.find_elements_by_class_name("_1jlxc _3Whw5").text

Однако python не может найти

    try:
        name=  driver.find_elements_by_class_name("_1jlxc _3Whw5").text

    except Exception as e:
        print("|False")

Результат: | Ложь

Ответы [ 4 ]

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

.text не нуждается (), это просто «.text»

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

0 голосов
/ 18 июня 2020

Вы должны принять во внимание пару вещей:

  • find_elements_by_* вернет список. Но вам нужен именно этот элемент. Поэтому вместо этого вам нужно использовать find_element_by_*.
  • driver.find_element_by_class_name() принимает один класс. Таким образом, он не будет принимать несколько классов, как в:

    driver.find_element_by_class_name("_1jlxc _3Whw5")
    
  • Наиболее важно, что элемент является элементом Dynami c, поэтому для печати текста Ana Smith вы должны вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать любую из следующих стратегий локатора :

    • Использование CSS_SELECTOR и get_attribute("innerHTML"):

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css"))).get_attribute("innerHTML"))
      
    • Использование XPATH и текст атрибут:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "element_xpath"))).text)
      
  • Однако значение (я) атрибута class , _1jlxc, _3Whw5, et c указывает, что значения генерируются либо ReactJS, Vue. js и др. c. Таким образом, эти значения никогда не являются статическими c, и они будут продолжать меняться каждый раз, когда вы заходите на веб-страницу.


Решение

Помимо вызова WebDriverWait вам необходимо построить либо , либо на основе атрибутов stati c, возможно, из некоторых элементов-предков.

0 голосов
/ 18 июня 2020

Чтобы обработать динамический c элемент, вам нужно вызвать WebDriverWait и дождаться, пока элемент станет видимым visibility_of_element_located() и следующим css selector

Код :

print(WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"._1jlxc._3Whw5"))).text)

вам необходимо импортировать следующие библиотеки

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
0 голосов
/ 18 июня 2020

find_elements_by_class_name возвращает список, будьте осторожны. Вы можете использовать find_element_by_class_name, если хотите первый элемент, или вы можете выбрать один элемент из списка, возвращаемого find_elements_by_class_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...