IE11 Автоматизация через Excel VBA - веб-страница компании - PullRequest
0 голосов
/ 24 мая 2018

Во-первых, я очень новичок в попытке автоматизировать IE через Excel VBA.При этом я работаю над тем, чтобы автоматизировать вход в систему на веб-странице конкретной компании (доступной только для наших сотрудников).Цель состоит в том, чтобы автоматизировать вход в систему (номер сотрудника, пароль и нажать «Войти»).Я считаю, что Firefox особенно полезен при идентификации полей, поэтому я использую его на снимке экрана.

В Интернете я нашел некоторый код для перехода на веб-страницу и ввода чего-либо в поле поиска.Я изменил это следующим образом (включенная ссылка не является реальной).

Наконец, к вопросу.Если я зайду, например, на веб-страницу www.google.com, все будет хорошо.Но когда я переключаюсь на ссылку моей компании, код останавливается в Do While, и я получаю сообщение об ошибке.Итак, мой вопрос: почему это работает для общей веб-страницы, а не для конкретной компании?Если я закомментирую эту строку, я все равно получаю отключенную ошибку при отладке.Предполагая, что эту проблему легко решить, правильно ли я определил поле?

Надеюсь, я включил достаточно информации для вас.Если нет, пожалуйста, дайте мне знать, что еще может потребоваться.Заранее благодарим за помощь!

Ошибка

Error

'start a new subroutine called SearchBot
Sub SearchBot()

'dimension (declare or set aside memory for) our variables
Dim objIE As InternetExplorer 'special object variable representing the IE browser

'initiating a new instance of Internet Explorer and asigning it to objIE
Set objIE = New InternetExplorer

'make IE browser visible (False would allow IE to run in the background)
objIE.Visible = True

'navigate IE to this web page (a pretty neat search engine really)
objIE.navigate "http://sampletext.asp"

'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

'enter value in the employee number box
objIE.document.getElementByName("txtEmployeeNum").Value = "123456"

Номер сотрудника

Employee Number

1 Ответ

0 голосов
/ 24 мая 2018

Правильное имя метода: getElementsByName.

Вы также хотите работать с элементом коллекции, возвращенным этим методом, а не со всей коллекцией.Использование индекса (0) позволит работать с 1-м элементом коллекции.

Изменить:

objIE.document.getElementByName("txtEmployeeNum").Value = "123456"

на:

objIE.document.getElementsByName("txtEmployeeNum")(0).Value = "123456"

С таким исправленным кодом вы должныпройти через код с F8 в VB Editor.Например, при наведении курсора посмотрите, получит ли objIE.Busy когда-либо FALSE и особенно если objIE.readyState достигнет 4 - если только 3, попробуйте вместо этого objIE.readyState < 3.

РЕДАКТИРОВАТЬ:

Попробуйте заменить:

Dim objIE As InternetExplorer
Set objIE = New InternetExplorer

на:

Dim objIE As Object
Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}")

Вам также может понадобиться изменить objIE.Navigate на objIE.Navigate2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...