ipatov_dn
@ipatov_dn

Как реализовать поиск элемента по классу, Python3+Selenium?

Задача такая, при помощи селениума я захожу на сайт авторизуюсь а дальше мне надо пробежаться по странице и найти определенные классы сейчас пока что пробую сделать их в список, в дальнейшем конечно хочется в словарь, но пока я застрял на этом цикле,
unread=driver.find_element(by=By.CLASS_NAME, value='under')  #driver.find_element_by_class_name('under')
completed=driver.find_element(by=By.CLASS_NAME, value='completed')#driver.find_element_by_class_name('completed')
com=[]
for i in driver:
    if i == completed:
        com.append(i)
        print(com)
    elif i==unread:
        com.append(i)
        print(com)
    elif i!=unread and i!=completed:
        print("Ничего не обнаружено")


может что не так делаю но происходит ошибка:
Traceback (most recent call last):
File "C:/.../PycharmProjects/untitled/directum.py", line 28, in
unread=driver.find_element(by=By.CLASS_NAME, value='under') #driver.find_element_by_class_name("under")
File "C:\Python35\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 752, in find_element
'value': value})['value']
File "C:\Python35\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "C:\Python35\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"under"}
(Session info: chrome=55.0.2883.87)
(Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 10.0.14393 x86_64)
  • Вопрос задан
  • 1938 просмотров
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
Вот так
unread = [];
unread=driver.find_element_by_class_name('under');
completed = [];
completed=driver.find_element_by_class_name('completed');


UPD:
Вот к чему пока пришли:
- На странице нет элементов .unders. Так что в коде нужно писать условие, что если (len(unders) > 0), то идем дальше
- не ясности с кодом дальше:
unread = [] #вот тут создали массив
unread=driver.find_element_by_class_name('under') #вот тут его ничем не наполнили, т.к. 0

com=[]
for i in driver: #вот это вообще загадочная строка для меня. У вас драйвер - это не коллекция. Это объект другой. может быть, вы хотели for i in unread ?
  if i == completed: #вот тут тоже загадка. вы сравниваете объект типа WebElement с массивом. 
    com.append(i)
    print(com)
  elif i==unread: #и тут
    com.append(i)
    print(com)
  elif i!=unread and i!=completed: #и тут
    print("Ничего не обнаружено")

#Что происходит?


UPD2: и вот еще вопрос:
#вот тут у вас переменная логично названа: completed - тут все элементы класса completed
completed=driver.find_element(by=By.CLASS_NAME, value='completed')
#а вот тут переменная unread, а класс under. Так и надо?
unread=driver.find_element(by=By.CLASS_NAME, value='under')  #driver.find_element_by_class_name('under')


UPD3: И вообще, вот читать постоянно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatov_dn
@ipatov_dn Автор вопроса
Дмитрий Еремин
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(executable_path="C:\Python35\chromedriver.exe")
#driver = webdriver.Firefox(executable_path = "C:\geckodriver.exe")

driver.get("https://directum.adm.yar.ru/Login.aspx") # Запускает браузер
#time.sleep(10) Ждет 10 сек

# Ввод логина
login = driver.find_element_by_id("sLogin")
login.clear()
login.send_keys("login")
# Ввод пароля
pswd = driver.find_element_by_id("sPwd")
pswd.send_keys("pass")
# Жмем войти
driver.find_element_by_id("btnLogin").click()

time.sleep(2) # Ждет 10 сек

button=driver.find_element_by_tag_name('button')
button.send_keys(Keys.ENTER)
time.sleep(5)

driver_new = driver.current_url
print('Новая страница: ', driver_new)

unread = []
unread=driver_new.find_element_by_class_name('under')
completed = []
completed=driver_new.find_element_by_class_name('completed')
com=[]
for i in driver_new:
    if i == completed:
        com.append(i)
        print(com)
    elif i==unread:
        com.append(i)
        print(com)
    elif i!=unread and i!=completed:
        print("Ничего не обнаружено")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы