Войти

Показать полную графическую версию : Автоматизация изменения данных авторизации на устройстве


Страниц : 1 [2]

Iska
13-02-2019, 02:32
У меня строка 37 — «Do». Покажите получившийся у Вас код.

Armsinglom
13-02-2019, 10:18
Option Explicit

Const READYSTATE_COMPLETE = 4


Dim objIE

Dim objRange
Dim arrRow

Dim boolIsFirstRow


Set objIE = Nothing

With WScript.CreateObject("Excel.Application")
With .Workbooks.Open("C:\Users\gzg\Desktop\ip.xlsx")
With .Worksheets.Item(1)
If .AutoFilterMode Then
boolIsFirstRow = True

For Each objRange In .AutoFilter.Range.Rows
If boolIsFirstRow Then
boolIsFirstRow = False
Else
arrRow = .Application.Transpose(.Application.Transpose(objRange.Value2))

If objIE Is Nothing Then
Set objIE = WScript.CreateObject("InternetExplorer.Application")
End If

With objIE
.Navigate "http://admin:password@" & arrRow(1) & "/chgpassw.htm"

Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE


With .Document.forms("frm")
.elements("user_no").value = "130"

.submit()
End With

Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

With .Document.forms("frm")
.elements("oldpassw").value = "password"
.elements("newpassw1").value = arrRow(3)
.elements("newpassw2").value = arrRow(3)

.submit()
End With

' А результат-то где?!
End With
End If
Next
Else
WScript.Echo "Probably no Autofilter in first worksheet in this workbook."
End If
End With

.Close
End With

.Quit
End With

If Not objIE Is Nothing Then
objIE.Quit
Set objIE = Nothing
End If
WScript.Quit 0

Armsinglom
13-02-2019, 23:36
Получается что ругается вот на это:
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE
Я правильно понимаю что мы ждем выполнения вот этой строки:
.Navigate "http://admin:password@" & arrRow(1) & "/chgpassw.htm
она не отрабатывает и скрипт умирает?

Вообщем при разных запусках скрипта может вылетать две ошибки:

- The object invoked has disconnected from its client. (80010108)
- Unspecified error (80004005)

и ругаются на одну и туже строку.

Armsinglom
11-09-2019, 21:41
Возобновлю тему.
Мне удалось заставить работать скрипт (проблема была вызвана с ограничениями на rdp).
Option Explicit

Const READYSTATE_COMPLETE = 4


Dim objIE

Dim objRange
Dim arrRow

Dim boolIsFirstRow


Set objIE = Nothing

With WScript.CreateObject("Excel.Application")
With .Workbooks.Open("C:\Users\gzg\Desktop\ip.xlsx")
With .Worksheets.Item(1)
If .AutoFilterMode Then
boolIsFirstRow = True

For Each objRange In .AutoFilter.Range.Rows
If boolIsFirstRow Then
boolIsFirstRow = False
Else
arrRow = .Application.Transpose(.Application.Transpose(objRange.Value2))

If objIE Is Nothing Then
Set objIE = WScript.CreateObject("InternetExplorer.Application")
End If

With objIE
.Navigate "http://admin:password@" & arrRow(1) & "/chgpassw.htm"

Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE


With .Document.forms("frm")
.elements("user_no").value = "130"

.submit()
End With

Do
WScript.Sleep 100
Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE

With .Document.forms("frm")
.elements("oldpassw").value = "password"
.elements("newpassw1").value = arrRow(3)
.elements("newpassw2").value = arrRow(3)

.submit()
End With

' А результат-то где?!
End With
End If
Next
Else
WScript.Echo "Probably no Autofilter in first worksheet in this workbook."
End If
End With

.Close
End With

.Quit
End With

If Not objIE Is Nothing Then
objIE.Quit
Set objIE = Nothing
End If
WScript.Quit 0
Есть пару проблем,
1) он почему то работает только с последним ip из спискаWith .Workbooks.Open("C:\Users\gzg\Desktop\ip.xlsx")
2) Так же есть проблема, если вдруг стандартный логин/пароль который указан в скрипте не подошел, то выскакивает окно для повторной попытки ввода логин/пароль. Из за проблемы которая в пункте 1, я не пойму будет он работать дальше, несмотря на ошибку авторизации или будет ждать пока я ввиду вручную корректные логин/пароль.

Iska
11-09-2019, 22:38
1) он почему то работает только с последним ip из списка »
Он работает со всеми строками из диапазона автофильтра:
For Each objRange In .AutoFilter.Range.Rows

2) Так же есть проблема, если вдруг стандартный логин/пароль который указан в скрипте не подошел, то выскакивает окно для повторной попытки ввода логин/пароль. Из за проблемы которая в пункте 1, я не пойму будет он работать дальше, несмотря на ошибку авторизации или будет ждать пока я ввиду вручную корректные логин/пароль. »
Без понятия. Вставляйте отладочные WScript.Echo "…" и смотрите.




© OSzone.net 2001-2012