Войти

Показать полную графическую версию : [решено] Помощь со скриптом автологина


Ugend
28-10-2012, 22:14
Всем привет!

Есть один скрипт на vbs, другой на powershell. Выполняют одну и ту же операцию.
Скрипты были найдены в интернете и немного подправлены под себя.
Суть скриптов заключается в том чтобы войти по адресу ввести логин/пароль и нажать логин.
Данный скрипт должен отрабатываться при входе пользователя в компьютер путем выполнения политики (GPO) "Сценарий входа".
Все работает отлично за одним исключением, скрипт полностью (на 100%) отрабатывается только, если вход осуществляется встроенной в домен учеткой Администратора или если просто зайти в компьютер локальным админом и выполнить скрипт вручную.
Если вход осуществляется обычным пользователем входящим только в группу "Пользователи домена", то скрипт открывает лишь заданный url и на этом все заканчивается. Если пользователя наделить аналогичными правами, что и у встроенного в домен админа, то скрипт отрабатывается, но не полностью, открывается url, происходит вход, но не запускается надстройка, необходимая для работы с сайтом. В любом случае меня данный расклад не устраивает, т.к. я не хочу наделять пользователей правами.

Прошу помочь в решении проблемы, либо может поможете в написании нового скрипта, который бы работал корректно. В написании скриптов я не силен.
Ошибки скриптов во вложении.

Коды скриптов:
VBS

Option Explicit

Const READYSTATE_COMPLETE = 4

Dim objIE
Dim objForm

Set objIE = WScript.CreateObject("InternetExplorer.Application")

With objIE
'.Visible = False
.Visible = True

.Navigate "https://idp.folio.fabasoft.com/idp/Authn/UserPassword"

' Ждём…
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

' Заполняем форму #0
Set objForm = .Document.forms(0)

With objForm
.elements("j_username").value = "login"
.elements("j_password").value = "password"

' Отправляем форму на сервер
.submit()
End With

' Ждём…
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

'Тут прочие действия, для чего, собственно и затевались…
End With

Set objIE = Nothing

WScript.Quit 0

PowerShell

$url = "https://idp.folio.fabasoft.com/idp/Authn/UserPassword"
$username="login"
$password="password"
$ie = New-Object -com internetexplorer.application;
$ie.visible = $true;
$ie.navigate($url);
$doc = $ie.document

$sw = @'
[DllImport("user32.dll")]
public static extern int ShowWindow(int hwnd, int nCmdShow);
'@

$type = Add-Type -Name ShowWindow2 -MemberDefinition $sw -Language CSharpVersion3 -Namespace Utils -PassThru
$type::ShowWindow($ie.hwnd, 3) # 3 = maximize

while ($ie.Busy -eq $true)
{
Start-Sleep -Milliseconds 1000;
}

$doc.getElementById("j_username").value = $username
$doc.Document.getElementByID("j_password").value = $password
$doc.Document.getElementById("submitpass").Click();

PS Использовать IE не обязательно, можно и Ghrome.
PPS Бился с проблемой дней пять, но безуспешно. Поэтому решил обратится за помощью.

Kazun
28-10-2012, 23:08
Попробуйте запустить скрипт PowerShell в режиме STA:

powershell -sta -file "C:\script.ps1"

Ugend
29-10-2012, 01:56
Попробовал, все по прежнему.

PS Добавил в коллекцию 3-й скрипт на vbs, так-же не работает. ((
PPS Я мягко сказать не силен в написании скриптов, да и вообще с языками на Вы, но мне кажется, что скрипта не отрабатывает из-за COM и DOM элементов/объектов, не знаю, как выразиться.
PPPS А можно ли обойтись без InternetExplorer.Application, а просто запускать браузер по его расположению и не обязательно IE?
PPPPS Можно ли этим параметром Set objIGH = WScript.CreateObject(blablabla )запустить Google Chrome?
Что-то на подобие этого:

Set wsh = WScript.CreateObject("WScript.Shell")

wsh.Run"""C:\Program Files\Internet Explorer\iexplore.exe""" & "https://idp.folio.fabasoft.com/idp/Authn/UserPassword", 1, True

Решил отработать вот этот скрипт на mail.ru, все работает. (запускал скрипт локально на компе из под обычного юзера)
Пробовал этот же скрипт на fabasoft'е и на yandex'е, не получилось.

DIM IE
DIM ipf

Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://mail.ru"
IE.Visible = True

While IE.Busy
WScript.Sleep 50
Wend

Set ipf = IE.document.all.mailbox__login
ipf.Value = "username" 'fill in the text box
Set ipf = IE.document.all.mailbox__password
ipf.Value = "password" 'fill in the text box
Set ipf = IE.document.all.mailbox__auth__button
ipf.Click 'click the submit button
'IE.Quit

Ugend
29-10-2012, 18:03
Разжился скриптом на Autoit. Скомпилировал скрипт в exe'шник, подсунул в сценарий, входа.
Результат прежний.
Что такого может работать у встроенного Админа, чего не работает у простого юзера даже наделенного аналогичными правами админа?
Я в замешательстве.

PS Наверно дело в самом сайте.

Я Мега-Супер-Злой!!!!!!!
Все дело было в "Контроле учетных записей" UAC
Ее надо полностью выключить!
Нет слов.

sov44
01-09-2015, 13:49
Поскольку тема http://forum.oszone.net/thread-267462.html закрыта, задам вопрос здесь.
Имеется портабельная версия браузера Iron (Iron_Portable.exe) и собственно ярлык на рабочем столе. Нужно сделать автологин на сайт http://www.pgz.ako.kirov.ru/website/Menu/Page/170
Попробовал сделать по аналогии, не получилось. Как понял, не создался объект Iron_Portable
Option Explicit

Const READYSTATE_COMPLETE = 4

Dim objIE
Dim objForm

Set objIE = WScript.CreateObject("Iron_Portable.Application")

With objIE
'.Visible = False
.Visible = True

.Navigate "http://www.pgz.ako.kirov.ru/website/Menu/Page/170"

' Ждём…
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

' Заполняем форму #0
Set objForm = .Document.forms(0)

With objForm
.elements("uls_name").value = "MyLogin"
.elements("uls_pswd").value = "MyPassword"

' Отправляем форму на сервер
.submit()
End With

' Ждём…
Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

'Тут прочие действия, для чего, собственно и затевались…
End With

Set objIE = Nothing

WScript.Quit 0
п.с. Win7x64

corbis
01-09-2015, 14:04
А вы уверены, что существует COM-объект у этой программы? Если существует его надо зарегистрировать в системе:

C:\>regsvr32.exe /path/to/component/someComObj.dll

Ну. а если нет, то ..

Ugend, отключать UAC не лучший вариант, мне так кажется. Может есть смысл установить разрешения для нужных пользователей для данного COM-объекта?

sov44
01-09-2015, 15:04
А вы уверены, что существует COM-объект у этой программы? »
А кто его знает? :)
Список файлов и каталогов http://rghost.ru/private/6GGCHwgBp/b1dcb05d971a774495a713a59236bb7a

corbis
01-09-2015, 16:11
Ничего по COM для этого браузера не нашел (хотя не очень долго искал), но его недавно походу сделали и, скорее всего, такой функциональности нет.
Наверно, есть смысл искать другие варианты реализации задуманного.

Iska
01-09-2015, 22:06
А кто его знает? »
Разработчик. Но единственный известный мне браузер с Automation — IE. Если Вы пытались, действуя по аналогии, превратить «InternetExplorer.Application» в некий «Iron_Portable.Application» — то это ошибка.

sov44
01-09-2015, 22:20
единственный известный мне браузер с Automation — IE »
К сожалению с него не могу залогится даже вручную на вышеуказанном сайте. Значит продолжаю ручками в Iron.

corbis
01-09-2015, 23:06
А почему с IE не работает? Должно бы работать.

sov44
01-09-2015, 23:24
А почему с IE не работает? Должно бы работать. »
Он настроен на работу с другими сайтами и настройки безопасности под них не дают залогится.

corbis
02-09-2015, 12:03
поковыряйте настройки IE. Обязательно должно работать. Обычно создатели сайта инструкцию присылают какие настройки сделать, чтобы работало.

sov44
10-09-2015, 11:32
поковыряйте настройки IE. Обязательно должно работать. »
Работает. Не смог понять, как определить значения "j_username", j_password страницы http://www.pgz.ako.kirov.ru/website/Menu/Page/170

Kazun
10-09-2015, 12:59
to sov44:

# Получаем Frame, который содержит форму для пароля и логина
$frame = $ie.Document.Frames.Item(0).Document.Body
# Получаем элемент Login
$login = $frame.document.getElementById("frmLogin")
# Заполняем поле Пользователь
$login.Value = 12345678
# Получаем элемент Password
$pass = $frame.document.getElementById("frmPassword")
# Заполняем поле Пароль
$pass.Value = 12345678
# Нажать кнопку Вход
$frame.document.activeElement.Click()

sov44
10-09-2015, 13:28
Основная задача - создать ярлык на рабочем столе для входа по логину и паролю на сайт.
Kazun, c PowerShell не работал, этот код нужно обернуть в скрипт (zk.ps1) и добавить как аргумент запуска странички в свойствах ярлыка ie?
Хотел добавить код в скрипт PowerShell шапки, но не понял, что куда. Сорри за ламерство с PowerShell.
Хотелось бы видеть код и на vbs




© OSzone.net 2001-2012