1 (изменено: ArtemonX, 2016-11-04 21:12:59)

Тема: VBS: Вход на почту через браузер

Всем привет. Помогите  пожалуйста с VBS-скриптом для входа в почту.


' скрипт - вход в почту.
Option Explicit

Dim objWshShell
Dim oForm

Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run "http://www.ukr.net/", 1, False


'Ждём окончания загрузки
    Do While objWshShell.Busy  ' здесь выдает ошибку: Объект не поддерживает свойство или метод Busy.
        WScript.Sleep 100
    Loop
 
 
'Получаем форму по ID 
Set oForm = objWshShell.document.forms("user-login-form")
' здесь выдает ошибку: Объект не поддерживает свойство или метод document.


'Заполняем поле логина
oForm("login").value = "вася"

Хотел сделать по аналогии с этим кодом:

Option Explicit

Dim oIE
Dim oForm
Set oIE = CreateObject("InternetExplorer.Application")

oIE.Visible = True

oIE.Navigate "http://notepad.cc/login/neeluzbo28"

'Ждём окончания загрузки
SyncNavigate()

'Получаем первую по счёту форму в документе (можно и по ID дёргать если он есть)
Set oForm = oIE.document.forms(0)

'Заполняем поле пароля
oForm("pad[password]").value = "123"

Как эту конструкцию (для InternetExplorer)

Set oIE = CreateObject("InternetExplorer.Application")

переписать для Мозилы?

2

Re: VBS: Вход на почту через браузер

http://florentbr.github.io/SeleniumBasic/

3 (изменено: ArtemonX, 2016-11-02 23:17:42)

Re: VBS: Вход на почту через браузер

Malcev, спасибо за совет. Установил это дополнение, но разобраться в этом не могу (англ.яз. не знаю).
Я в VBA (в Access) использовал такой прием как записывал макрос , а потом его преобразовывал в код VBA.
В описании на других ресурсах/сайтах я  прочитал, что в Selenium есть такая же возможность, но я не понял как и где.

Я здесь на форуме поискал сначала, почитал, и открывая новую тему , расчитывал на конкретные подсказки.


В моем коде (первый фрагмент) я написал как комментарии , где и какие ошибки выпадают. Как их исправить?

4

Re: VBS: Вход на почту через браузер

Так там же примеры есть.
Один, думаю, как-раз тот, что вам нужно:

C:\Program Files\SeleniumBasic\Examples\VBScript\GmailSignIn(Firefox).vbs

Сам я сильно в Selenium не копался, но в Firefox устанавливается Selenium add-on, который может записывать действия на странице.
Кстати Selenium не работает в мозилле новее чем 46.01.

5 (изменено: ArtemonX, 2016-11-04 21:13:30)

Re: VBS: Вход на почту через браузер

Malcev

у меня мозилла 49.00.
Вот этот код:


' ---------------------------------------------------------------------------------------
' Login to GMail using Firefox
' ---------------------------------------------------------------------------------------

Class Script
    Dim driver

    Sub Class_Initialize
        Set driver = CreateObject("Selenium.FirefoxDriver")
        driver.Get "https://accounts.google.com/ServiceLogin"
        driver.FindElementById("Email").SendKeys "your email"
        driver.FindElementById("next").Click
        driver.FindElementById("Passwd").SendKeys "your password"
        driver.FindElementById("signIn").Click
        
        WScript.Echo "Click OK to close the browser"
    End Sub

    Sub Class_Terminate
        driver.Quit
    End Sub
End Class

Он не будет работать без Селениума:

 Set driver = CreateObject("Selenium.FirefoxDriver")

Без Селениума есть варианты по моей теме?

6

Re: VBS: Вход на почту через браузер

Без Селениума есть варианты по моей теме?

Я других способов автоматизировать фаерфокс не знаю.

7

Re: VBS: Вход на почту через браузер

Начну сначала, т.к. хочу понять как это работает.
Эта конструкция работает - запускает Мозилу и открывает страницу с указанным адресом:

Option Explicit

Dim oBrows

Set oBrows = CreateObject("WScript.Shell")
oBrows.Run "http://www.youtube.com/" 
Set oBrows = Nothing

WScript.Quit 0

Я конечно понимаю , что CreateObject("WScript.Shell")  - это "создается объект", но что обозначают слова "WScript.Shell" и почему именно "WScript.Shell" и откуда их берут?

Если я пишу так


Option Explicit

Dim oBrows

Set oBrows= CreateObject("Firefox.Application")  'здесь выдает ошибку : Невозможно создание объекта контейнером ActiveX: Firefox.Application

oBrows.Visible = True

oBrows.Navigate "http://www.youtube.com/"

'Ждём окончания загрузки
SyncNavigate()

то выдает ошибку : Невозможно создание объекта контейнером ActiveX: Firefox.Application
Как обозначить объектом приложение МОЗИЛУ?

8

Re: VBS: Вход на почту через браузер

Я конечно понимаю , что CreateObject("WScript.Shell")  - это "создается объект", но что обозначают слова "WScript.Shell" и почему именно "WScript.Shell" и откуда их берут?

Ну есть такой объект. Но с помощью него конролировать фаерфокс вы не сможите:
http://www.script-coding.com/WSH.html

Как обозначить объектом приложение МОЗИЛУ?

Я ж писал - через селениум.
Чем он вас не устраивает?

9

Re: VBS: Вход на почту через браузер

ArtemonX пишет:

но что обозначают слова "WScript.Shell" и почему именно "WScript.Shell" и откуда их берут?

Для полного понимания приведу цитату из книги:

+ WSH для Windows 2000/XP. Попов А.В. 2002

Для тoro чтобы из сценария получить доступ к свойствам или методам внешнеro сервера автоматизации, вначале надо "создать" соответствующий объект, т. е. заrpузитъ в память экземпляр нужного СОМ-объекта и coxpaнить в переменной ссылку на этот объект.
...
В любом случае в используемый метод или функцию в качестве параметра передается программный идентификатор объекта (ProgID), заключенный в скобки. Пример на языке JScript:

var wA==WScript.CreateObject("Word.Application");

То же самое на VВScript:

Set WA==WScript.CreateObject("Word.Application")

Перед точкой в ProgID стоит имя библиотеки типов (type library) для объекта, которая может существовать как в виде отдельноro файла с расширением tlb, так и в виде части файла с исполняемым кодом объекта (библиотека типов, содержащая сведения о СОМ-объекте, реrистрируется в системном реестре при установке приложения, использующеrо этот объект). После точки в ProgID указывается имя класса, содержащеro свойства и методы, доступные для использования дрyrими приложениями.
Выполняя метод CreateObject, интерпретатор сценария через ProgID получает из системноrо реестра путь к файлам нужной библиотеки типов. Затем с помощью этой библиотеки в память заrpужается экземпляр запрашиваемоro объекта, и ero интерфейсы становятся доступными для использования в сценарии. Ссылка на созданный объект сохраняется в переменной; в дальнейшем, используя эту переменную, мы получаем доступ к свойствам и методам объекта, а также к ero вложенным объектам (если они имеются).


Malcev пишет:

Кстати Selenium не работает в мозилле новее чем 46.01.
Чем он вас не устраивает?

>

ArtemonX пишет:

у меня мозилла 49.00.

Можно подумать в сторону подобного запуска Мозиллы и автологина после загрузки страницы с помощью расширения. Есть онлайновый LastPass Password Manager, который это умеет. Есть оффлайновый Secure Login с хоткеем. В случае последнего можно останавливать загрузку страницы по Esc и отслеживать смену значка анимации загрузки, после эмулировать Alt+N. Но это на чём-то вроде AHK лучше делать.

10 (изменено: ArtemonX, 2016-11-04 21:11:04)

Re: VBS: Вход на почту через браузер

Malcev
Не нашел среди дополнений к моей мозиле Selenium add-on. Но есть Selenium Expert (Selenium IDE) , Selenium IDE Button и др.
Какой из них то?

11 (изменено: ArtemonX, 2016-11-04 21:10:35)

Re: VBS: Вход на почту через браузер

Flasher

Про ООП я имею только общее представление.  Я так понимаю можно создать/описать любой объект, добавить его в библиотеку, а затем его использовать.
Таким образом эта конструкция

Set oBrows= CreateObject("Firefox.Application") 

не работает, т.к. в библиотеке не описан объект "Firefox".
А как это сделать?
или
Я расчитывал на то, что всё уже придумано до меня

12

Re: VBS: Вход на почту через браузер

ArtemonX
Прежде прочитайте и отредактируйте свои посты.

13

Re: VBS: Вход на почту через браузер

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

Option Explicit

Dim oBrows

Set oBrows = WScript.CreateObject("wscript.shell") 
'oBrows.run "firefox.exe"
oBrows.Run "https://mail.ukr.net/classic/login", 1, False
wscript.sleep (5000)

oBrows.sendkeys ("логин")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("{TAB}")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("пароль")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("{enter}")

Set oBrows = Nothing
call msgbox("Finished!")
wscript.quit

А если логин и пароль латинскими буквами, то сразу на первой же букве какой-то сбой.

14

Re: VBS: Вход на почту через браузер

ArtemonX пишет:

Я так понимаю можно создать/описать любой объект, добавить его в библиотеку, а затем его использовать.

Создаётся объект как раз методом CreateObject, а описывается в библиотеке типов, которая содержится либо отдельно (tlb) либо входит в состав зарегистрированного в реестре компонента (dll, ocx, exe). В общем, без этих файлов нельзя получить непосредственный доступ к управлению нужной программой через COM.

ArtemonX пишет:

не работает, т.к. в библиотеке не описан объект "Firefox".

В какой библиотеке? Этой библиотеки попросту нет в системе, да и взять её неоткуда. FireFox, как и ряд других браузеров, - это не продукт Microsoft, который вовсе не обязан заботиться о создании сторонних компонентов. Поэтому на стороне и появляются продукты вроде Selenium.

ArtemonX пишет:

А если логин и пароль латинскими буквами, то сразу на первой же букве какой-то сбой.

Такой способ совершенно ненадёжен. Задержки Sleep не дают точной уверенности в том, что загрузка страницы будет окончена, ибо система с учётом общей нагрузки ведёт себя нестабильно. Tакже сиё не предовратит появление поверх приложения иных окон при выполнении SendKeys, который в свою очередь эмулирует нажатие клавиш с текущим языком ввода, а не ввод записанных букв. oBrows - это явно не то название, которое тут годится, ибо к браузеру не приурочено никаким боком. Обычно переменную именуют WSH или WshShell.
Комментарий "' задержка для возможности увидеть" вообще никак не описывает текущую логику. Делать задержки между вводом в поля совершенно не требуется. Т.е. после установки нужного языка ввода вполне хватило бы записи:

WSH.SendKeys "логин{TAB}пароль{ENTER}"

Последние 3 строчки вообще лишние.
Что касается латиницы, то в Win7+ остальное в SendKeys игнорируется, т.ч. там даже менять язык не нужно. На XP можно переключаться таким способом. Либо использовать AutoItX3 со вставкой.
Но, как я уже предлагал, лучше Secure Login + AHK, только тему придётся уже создать в соотв. разделе.

15

Re: VBS: Вход на почту через браузер

Flasher
Да я понимаю, что не надежно, и что нужно сократить время на выполнение процедуры до минимума. И тем не менее.
Я написал код с разбивкой на шаги и задержками для себя для наглядности и чтобы засечь момент, когда начинается сбой.

Option Explicit

Dim oBrows

Set oBrows = WScript.CreateObject("wscript.shell") 
oBrows.Run "https://mail.ukr.net/classic/login", 1, False
wscript.sleep (5000)

call msgbox("p")
oBrows.sendkeys ("p")
' задержка для возможности увидеть
     WScript.Sleep 500
call msgbox("r")
oBrows.sendkeys ("r")
' задержка для возможности увидеть
     WScript.Sleep 500
call msgbox("o")
oBrows.sendkeys ("o")
' задержка для возможности увидеть
     WScript.Sleep 500
call msgbox("m")
oBrows.sendkeys ("m")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("{TAB}")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("b")
' задержка для возможности увидеть
     WScript.Sleep 500

oBrows.sendkeys ("{enter}")

Set oBrows = Nothing
call msgbox("Finished!")
wscript.quit

А сбой начинается как только встречается первая латинская буква.
При чем здесь раскладка клавиатуры?
Латинская буква "r" выводится как "Ctrl-F" появляется поле "найти на странице" и в этом поле появляются символы "/-1" ,например.
Может сам скрипт нужно сохранять в другой кодировке?
Я сохранял в 1251 ANSI-Кириллица.

16

Re: VBS: Вход на почту через браузер

ArtemonX, откатитесь на 46 мозиллу, отключите автоапдейты, установите селениум, приведенный по ссылке выше.
И по примеру подключения к гмейлу набросайте свой скрипт.

17

Re: VBS: Вход на почту через браузер

ArtemonX
Раскладка при том, что в соответствии с ней набирается текст текущего языка ввода.
Толку от сохранения скрипта в иной кодировке тут нет никакого.
Советую убрать фокус из полей в браузере и ввести r при латинице, потом при кириллице и посмотреть на поведение.