Перейти к содержимому

Фотография

Авторизация и вывод первых 5 сообщений Python

Python

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 26 декабря 2016 - 13:42

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
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("pswd")

# Жмем войти
driver.find_element_by_id("btnLogin").click()

time.sleep(2) # Ждет загрузки браузера

button=driver.find_element_by_tag_name('button')
button.send_keys(Keys.ENTER)

time.sleep(5) # Ждет загрузки браузера

# Получаем новую страницу
driver_new = driver.current_url
print('Новая страница: ', driver_new)
driver.get(driver_new)


########

try:
    unread = driver.find_element_by_class_name('under')
    print(unread.text)
except NoSuchElementException:
    print('Нет новых писем')

completed=driver.find_element_by_class_name('completed');

print(completed.text)

 ​А от с этого места ####### загвоздка, under класс нового письма, completed класс выполненного, есть еще прочтенное письмо у которого нет отдельного класса, но у всех у них есть класс Job_obj. Вопрос как сделать так чтобы выводилось первые 5 сообщений и при этом както обозначался их статус

 

с Python на вы с селениумом знаком в общих чертах

форум поискал нужного не нашел 

в гугле забанен

 


  • 0

#2 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 28 декабря 2016 - 14:37

Скорее всего можно делать поиск по xpath и сразу отбирать необходимые письма. 

Чтобы посоветовать точнее, нужен исходный код страницы в той части, где твои письма обозначены.

 

И смысл этой операции не очень понятен:

# Получаем новую страницу
driver_new = driver.current_url
print('Новая страница: ', driver_new)
driver.get(driver_new)

По сути ты просто перезагружаешь страницу тут.

 

 

P.S. Разбанил тебя в гугле  :victory:


  • 0

#3 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 28 декабря 2016 - 18:22

Скорее всего можно делать поиск по xpath и сразу отбирать необходимые письма. 

Чтобы посоветовать точнее, нужен исходный код страницы в той части, где твои письма обозначены.

 

И смысл этой операции не очень понятен:

# Получаем новую страницу
driver_new = driver.current_url
print('Новая страница: ', driver_new)
driver.get(driver_new)

По сути ты просто перезагружаешь страницу тут.

 

 

P.S. Разбанил тебя в гугле  :victory:

перезагружаю для того чтобы получить новый адрес страницы после авторизации

<div id="ctl00_MainContent_FolderContent" class="object_contents auto_load" data-component="FolderContents">
    <div id="12110850" kind="Job" class="List folder_item  completed Job_obj">
        <div class="content w100">
            <h2>
                <div col="NAME" class="objectname" onclick="cancelBubble(event); return DoFirstAction(this, 'Job');">
                    &gt;&gt; ВХ.22-3231/16 Исполнитель: Попова М.Ю. (Отв) - Для исполнения.
                </div>
            </h2>
            <div class="addreq">
                <span>
                    <span class="AddText">Создано: 28.12.2016 12:11</span>
                    <span class="AddText">Срок: 09.01.2017</span>
                    <span class="AddText">Инициатор: Попова Марина Юрьевна</span>
                </span>
                <div class="actions"></div>
            </div>
        </div>
    </div>
    <div id="12108967" kind="Job" class="List folder_item  completed Job_obj  even">
        <div class="content w100">
            <h2>
                <div col="NAME" class="objectname" onclick="cancelBubble(event); return DoFirstAction(this, 'Job');">
                    &gt;&gt; ВХ.01-11097/12 Исполнитель: Серова Ю.И. (Отв) - Для организации исполнения мероприятий Концепции и подготовки информации в адрес ДО ежегодно.</div>
            </h2>
            <div class="addreq">
                <span>
                    <span class="AddText">Создано: 28.12.2016 10:47</span>
                    <span class="AddText">Срок: 28.12.2016</span>
                    <span class="AddText">Инициатор: Петрушова Елена Геннадьевна</span>
                </span>
                <div class="actions"></div>
            </div>
        </div>
    </div>
</div>

интирисуют именно классы completed Job_obj under, Job_obj это общий класс для всех писем, completed выполненый, under это новое письмо, и по xpath тяжело тут искать, а по классу не могу понять как сделать общий список из 5 первых писем и подписать их какие новые какие нет


  • 0

#4 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 29 декабря 2016 - 11:47

А в чем сложность поиска по xpath?

 

Например, для всех completed писем: 

//div[@class[contains(.,"completed Job_obj")]]

Ну и дальше вниз по дереву собирай, что нужно.


  • 0

#5 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 29 декабря 2016 - 13:30

А в чем сложность поиска по xpath?

 

Например, для всех completed писем: 

//div[@class[contains(.,"completed Job_obj")]]

Ну и дальше вниз по дереву собирай, что нужно.

сложность в том что этот див вложен во множество дивов и ячеек таблиц и наверное проще всетаки по классу искать, а и мне нужен не только completed но и там также появляются письма с классом  unread

вот и хочу узнать как бы мне получить масив из первых 5 писем с классом Job_obj и в них сделать проверку и подписать какой из них unread какой completed а какой просто even 
 


  • 0

#6 baxatob

baxatob

    Опытный участник

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 29 декабря 2016 - 13:47

Тогда можно собрать все письма в список, используя универсальный для всех xpath:

//div[@class[contains(.,"Job_obj")]]

Потом сделать срез первых 5 элементов и уже в этом срезе выполнить проверку признаков unread, completed, even.

 

 

 

сложность в том что этот див вложен во множество дивов и ячеек таблиц

 

Так xpath именно для того и нужен, чтобы сделать путешествие по дереву тэгов простым и приятным.


  • 0

#7 Deon

Deon

    Новый участник

  • Members
  • Pip
  • 14 сообщений
  • ФИО:Дмитрий

Отправлено 04 января 2017 - 11:53

Тогда можно собрать все письма в список, используя универсальный для всех xpath:

//div[@class[contains(.,"Job_obj")]]

Потом сделать срез первых 5 элементов и уже в этом срезе выполнить проверку признаков unread, completed, even.

 

 

 

сложность в том что этот див вложен во множество дивов и ячеек таблиц

 

Так xpath именно для того и нужен, чтобы сделать путешествие по дереву тэгов простым и приятным.

 

 

и можешь для особоодаренных разъяснить эту строчку: "//div[@class[contains(.,'unread')]]"

я так ее понимаю что ищем див класc которого содержит unread, но вот зачем ., и в документации не где не написано про contains 


  • 0



Темы с аналогичным тегами Python

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных