sim3x: Дмитрий: ну все?)) да, питон я не знаю. Я по .net или java больше. Но общая идея такая же в работе с селениумом: если экземпляр еще жив, делаем quit)
Дмитрий: я питон вообще не знаю.
Но, имея то, что есть, идем таким путем:
- берем в массив (назовем его arr) все элементы по нужно нам классу.
- (если массив больше нуля) пишем цикл от для i от 0 до (len(arr) - 1)
- в цикле проверяем:
- если итератор > 4, то break; (почитайте про это ключевое слово)
- дальше, все еще в цикле, выводим arr[i] ну и для него же, в цикле, выполняем проверку, прочитал или нет
Все. Дальше уже только программу за тебя писать. С гуглом-пополам, за вечер такое напишешь
Дмитрий: ну давайте по порядку:
- "for i in driver: - циклом пробежать по всей странице". driver - это не страница. Это скорее весь браузер. А помимо страницы у него есть еще множество полей. В общем, driver - точно не набор элементов. Набор элементов вы как раз вытаскиваете через драйвер и сохраняете в массив.
- "if i == completed". Ну, предположим, вы написали, for i in completeds. Тогда каждый i - это просто один из веб элементов. Нужно понимать, что сам WebElement тоже не только текст, но и набор html-атрибутов, вложенных элементов и еще много чего. Поэтому, если нужно сравнить текст, то надо копать в сторону if i.text == "текст для сравнения"
- "если возникает ошибка при том что элемента нет". Ошибка возникает не от того, что элемента нет, а от того, что вы пытаетесь обратиться к нему. Я там выше обновил ответ. Вам нужно выполнять доп проверку. Погуглте про длину массива. нужно получить набор элементов, проверить, что длина массива > 0 и тогда только начать делать то, что вам нужно
Дмитрий: ну и все. Он на unreads и ругается. Потому что их нет
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("Ничего не обнаружено")
Дмитрий: пишите, пожалуйста, развернуто, где пишет undefined, в какой части?
var unders = $$('.under').length
//вот здесь UNDEFINED - это нормально
var completeds = $$('.completed').length
//и вот здесь UNDEFINED - это нормально
unders //здесь - нет
completeds
можно просто вот так в консоль хрома написать
console.log($$('.under').length)
в браузере, в консоли пишем 4 команды
var unders = $$('.under').length //запомнили количество всего с классом under
var completeds = $$('.completed').length //запомнили количество всего с классом completed
unders //должно вывести число
completeds //должно вывести число Дмитрий:
Дмитрий: еще раз: unread=driver_new.find_element_by_class_name('under') - вот так не сработает. Потому что driver_new - это просто строка с текущим url. у нее нет метода find_element_by_class_name
работайте только с одним драйвером (driver)
Попробуйте, как я выше написал, еще раз перейти по новому адресу
Дмитрий: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"under"}
ну нету такого элемента
покажите страничку, на которой делаете это все