#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 , поэтому, если элемент не отображается с нулевым размером , он ничего не вернет .
Две вещи, которые вы могли бы сделать, это :
- прокрутите до элемента, прежде чем получить текст
Actions actionProvider = new Actions(driver); // Performs mouse move action onto the element actionProvider.moveToElement(search[0]).build().perform(); print(search[0].text)
- Используйте textContent
Текстовое содержимое не проверяет отображение или размер , оно просто выдает содержимое
print(search[0].get_attribute("textContent"))