Почему .text всегда пуст?

#python #python-3.x #selenium #selenium-chromedriver

Вопрос:

Я пробовал использовать ссылки на getText (), но когда я использую этот метод, я всегда получаю ошибку "WebElement object has no attribute getText()" . Я нашел. text через видео на YouTube, но я тоже не получаю от него результатов. Есть какие-нибудь мысли?

 from selenium import webdriver

driverPath = 'C:Program Files (x86)chromedriver.exe'
driver = webdriver.Chrome(driverPath)


driver.implicitly_wait(20)
driver.get ('https://shop.pricechopper.com/search?search_term=lettuce')

pageSource = driver.page_source

search = driver.find_elements_by_class_name ("css-dr3s47")
print (search[0].text)



driver.quit()
 

Комментарии:

1. Вместо .text того, чтобы пытаться .get_attribute("innerText") . И посмотрим, сработает ли это.

2. вы также можете попытаться эмулировать запрос api, а не очищать

3. спасибо за ответы, почти все предложенные решения сработали.

Ответ №1:

Вы используете Selenium с Python, поэтому правильный метод .text

.getText() предназначен для привязок Selenium-Java.

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

Пожалуйста, используйте явное ожидание или time.sleep() , что в худшем случае, чтобы избавиться от этой проблемы.

Кроме того, есть всплывающее окно, в котором нам нужно будет нажать на закрыть веб-элемент, чтобы css-dr3s47 он был доступен для порта просмотра Selenium.

Код :

 driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.implicitly_wait(30)
wait = WebDriverWait(driver, 30)
driver.get("https://shop.pricechopper.com/search?search_term=lettuce")
try:
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@ng-click='processModalCloseClick()']"))).click()
    print('Clicked on modal pop up closer button')
except:
    pass

search = driver.find_elements_by_class_name ("css-dr3s47")
print (search[0].text)
 

Импорт :

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

Ответ №2:

getText возвращает элементы с отображаемым размером более 0 * 0 , поэтому, если элемент не отображается с нулевым размером , он ничего не вернет .

Две вещи, которые вы могли бы сделать, это :

  1. прокрутите до элемента, прежде чем получить текст
  Actions actionProvider = new Actions(driver);
  // Performs mouse move action onto the element
  actionProvider.moveToElement(search[0]).build().perform();
  print(search[0].text)
 
  1. Используйте textContent

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

     print(search[0].get_attribute("textContent"))