Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Ссылка Javascript - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ссылка Javascript (Макросы Sub)
Ссылка Javascript
VIA Дата: Четверг, 20.02.2014, 09:56 | Сообщение № 21
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вот HTML страницы, открывающийся по УРЛу
http://iam.intranet/account/view.jsp?id=pppetrova_iam
К сообщению приложен файл: IAM.txt (49.7 Kb)
 
Ответить
СообщениеВот HTML страницы, открывающийся по УРЛу
http://iam.intranet/account/view.jsp?id=pppetrova_iam

Автор - VIA
Дата добавления - 20.02.2014 в 09:56
egonomist Дата: Четверг, 20.02.2014, 14:38 | Сообщение № 22
Группа: Гости
Добрый день,
у вас, скорей всего, после нажатия кнопки происходит обновление/перерисовка формы.
IE при загрузке считывает структуру документа и изменения на странице - не отслеживает.
Поэтому, при изменении формы нужно повторно запустить инициализацию структуры документа.
[vba]
Код

s = "http://www.crowdrise.com/skollsechallenge" ' generate link
oIE.Navigate (s) 'load webpage
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'wait while loading
Set maPageHtml = oIE.Document' Вот тут происходит инициализация
Set SelectList = maPageHtml.getElementsbyclassname("more seeMoreTeams") 'select description area
SelectList(0).Click 'делаем щелчок, при этом структура меняется
Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'ждем пока обновится

Set maPageHtml = oIE.Document 'ПОВТОРНОЕ СЧИТЫВАНИЕ - читает уже обновленную форму
[/vba]
 
Ответить
СообщениеДобрый день,
у вас, скорей всего, после нажатия кнопки происходит обновление/перерисовка формы.
IE при загрузке считывает структуру документа и изменения на странице - не отслеживает.
Поэтому, при изменении формы нужно повторно запустить инициализацию структуры документа.
[vba]
Код

s = "http://www.crowdrise.com/skollsechallenge" ' generate link
oIE.Navigate (s) 'load webpage
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'wait while loading
Set maPageHtml = oIE.Document' Вот тут происходит инициализация
Set SelectList = maPageHtml.getElementsbyclassname("more seeMoreTeams") 'select description area
SelectList(0).Click 'делаем щелчок, при этом структура меняется
Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'ждем пока обновится

Set maPageHtml = oIE.Document 'ПОВТОРНОЕ СЧИТЫВАНИЕ - читает уже обновленную форму
[/vba]

Автор - egonomist
Дата добавления - 20.02.2014 в 14:38
VIA Дата: Четверг, 20.02.2014, 15:15 | Сообщение № 23
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
у вас, скорей всего, после нажатия кнопки происходит обновление/перерисовка формы.
IE при загрузке считывает структуру документа и изменения на странице - не отслеживает.
Поэтому, при изменении формы нужно повторно запустить инициализацию структуры документа


Добрый день!
Спасибо. Это похоже то с чем я столкнулся бы чуть позже. Для начала я не могу научить его нажимать кнопку (ссылка javascript)

Кстати javascript отлично посылается браузеру
oIE.Navigate "javascript: alert('Работает')"

Но у меня после открытия начальной страницы, VBA ее теряет и на любое последующее действие выдает:
automation error
The object invoked has disconnected from its clients

Может это быть из-за HTTPS ? Но страница открывается верно (аутентификация по учетной записи домена)


Сообщение отредактировал VIA - Четверг, 20.02.2014, 16:01
 
Ответить
Сообщение
у вас, скорей всего, после нажатия кнопки происходит обновление/перерисовка формы.
IE при загрузке считывает структуру документа и изменения на странице - не отслеживает.
Поэтому, при изменении формы нужно повторно запустить инициализацию структуры документа


Добрый день!
Спасибо. Это похоже то с чем я столкнулся бы чуть позже. Для начала я не могу научить его нажимать кнопку (ссылка javascript)

Кстати javascript отлично посылается браузеру
oIE.Navigate "javascript: alert('Работает')"

Но у меня после открытия начальной страницы, VBA ее теряет и на любое последующее действие выдает:
automation error
The object invoked has disconnected from its clients

Может это быть из-за HTTPS ? Но страница открывается верно (аутентификация по учетной записи домена)

Автор - VIA
Дата добавления - 20.02.2014 в 15:15
egonomist Дата: Четверг, 20.02.2014, 17:04 | Сообщение № 24
Группа: Гости
в коде что я привел, как раз пример нажатия кнопки с javaScript. Точно не знаю будет ли работать клик на ссылке, но
попробуйте так:
[vba]
Код

Public Sub x()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Set variables
Dim ar
Dim oIE As Object, sHTML As String
Dim tmp, i As Long
Set oIE = CreateObject("InternetExplorer.Application") 'start IE
oIE.Visible = 1 'IE window visible - 0-hide 1-show
Worksheets("Лист2").Cells.ClearContents 'очищаем лист
s = "file:\\D:\IAM.htm" ' тут ваша ссылка на интранет
oIE.Navigate (s) 'грузим
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока прогрузится
Set maPageHtml = oIE.Document 'считываем структуру документа
Set SelectList = maPageHtml.getElementsbyclassname("Tab2Lnk") 'выбираем нужные ссылки по которым надо щелкать (с нужным скриптом)
SelectList(0).Click 'щелкаем (теоретически должен запуститься скрипт); индекс 0 - делегирования, 1-атрибуты и т.д
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления страницы
Set maPageHtml = oIE.Document 'считываем обновленный документ
Set Htable = maPageHtml.getElementsbyTagname("tbody") 'выбираем все таблицы
For i = 0 To Htable.Length - 1 'циклом выбираем первую таблицу в которой кол-во строк больше 3
If Htable(i).Rows.Length > 3 Then Exit For
Next i
last = Worksheets("Лист2").Range("A65536").End(xlUp).Row 'последняя строка на листе
Set maTable = Htable(i) ' выбираем найденную в цикле таблицу
For i = 1 To maTable.Rows.Length ' цикл по строкам
For j = 1 To maTable.Rows(i - 1).Cells.Length ' цикл по столбцам
Worksheets("Лист2").Cells(s, j) = maTable.Rows(i - 1).Cells(j - 1).innertext 'значение ячейки
Next j
Next i
Worksheets("Лист2").Select
Set maPageHtml = Nothing 'clear variables
oIE.Quit 'exit from IE
'the end
Set oIE = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Finish"
End Sub

[/vba]


Сообщение отредактировал Serge_007 - Пятница, 21.02.2014, 00:31
 
Ответить
Сообщениев коде что я привел, как раз пример нажатия кнопки с javaScript. Точно не знаю будет ли работать клик на ссылке, но
попробуйте так:
[vba]
Код

Public Sub x()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'Set variables
Dim ar
Dim oIE As Object, sHTML As String
Dim tmp, i As Long
Set oIE = CreateObject("InternetExplorer.Application") 'start IE
oIE.Visible = 1 'IE window visible - 0-hide 1-show
Worksheets("Лист2").Cells.ClearContents 'очищаем лист
s = "file:\\D:\IAM.htm" ' тут ваша ссылка на интранет
oIE.Navigate (s) 'грузим
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока прогрузится
Set maPageHtml = oIE.Document 'считываем структуру документа
Set SelectList = maPageHtml.getElementsbyclassname("Tab2Lnk") 'выбираем нужные ссылки по которым надо щелкать (с нужным скриптом)
SelectList(0).Click 'щелкаем (теоретически должен запуститься скрипт); индекс 0 - делегирования, 1-атрибуты и т.д
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления страницы
Set maPageHtml = oIE.Document 'считываем обновленный документ
Set Htable = maPageHtml.getElementsbyTagname("tbody") 'выбираем все таблицы
For i = 0 To Htable.Length - 1 'циклом выбираем первую таблицу в которой кол-во строк больше 3
If Htable(i).Rows.Length > 3 Then Exit For
Next i
last = Worksheets("Лист2").Range("A65536").End(xlUp).Row 'последняя строка на листе
Set maTable = Htable(i) ' выбираем найденную в цикле таблицу
For i = 1 To maTable.Rows.Length ' цикл по строкам
For j = 1 To maTable.Rows(i - 1).Cells.Length ' цикл по столбцам
Worksheets("Лист2").Cells(s, j) = maTable.Rows(i - 1).Cells(j - 1).innertext 'значение ячейки
Next j
Next i
Worksheets("Лист2").Select
Set maPageHtml = Nothing 'clear variables
oIE.Quit 'exit from IE
'the end
Set oIE = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Finish"
End Sub

[/vba]

Автор - egonomist
Дата добавления - 20.02.2014 в 17:04
VIA Дата: Пятница, 21.02.2014, 12:14 | Сообщение № 25
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо огромное - это то что нужно!
Но мне пока не удается это проверить :)
Не могу понять причину потери контроля над IE. Попробую пояснить:

IE открытый вручную и открытый через VBA - CreateObject("InternetExplorer.Application"), ведут себя по разному
1. В открытом через VBA после входа на любую страницу https://intranet, переход на другой сайт вызывает открытие нового окна!!!
2. В открытом вручную никаких странностей все открывается в одном окне.

И думаю именно поэтому VBA выдает ошибку. Опытный пример:
[vba]
Код
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop ' открылсь about:blank
oIE.Navigate "https://google.ru"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'открылся залогиненый https google
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'снова about:blank
oIE.Navigate "https://iam.intranet/"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'открылся сайт intranet
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'Ошибка Automation error The interface is unknown.
[/vba]

В чем волшебство? Может в том, что выход в инет через proxy? Куда копать?


Сообщение отредактировал Serge_007 - Пятница, 21.02.2014, 22:56
 
Ответить
СообщениеСпасибо огромное - это то что нужно!
Но мне пока не удается это проверить :)
Не могу понять причину потери контроля над IE. Попробую пояснить:

IE открытый вручную и открытый через VBA - CreateObject("InternetExplorer.Application"), ведут себя по разному
1. В открытом через VBA после входа на любую страницу https://intranet, переход на другой сайт вызывает открытие нового окна!!!
2. В открытом вручную никаких странностей все открывается в одном окне.

И думаю именно поэтому VBA выдает ошибку. Опытный пример:
[vba]
Код
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop ' открылсь about:blank
oIE.Navigate "https://google.ru"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'открылся залогиненый https google
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'снова about:blank
oIE.Navigate "https://iam.intranet/"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'открылся сайт intranet
oIE.Navigate "about:blank"
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'Ошибка Automation error The interface is unknown.
[/vba]

В чем волшебство? Может в том, что выход в инет через proxy? Куда копать?

Автор - VIA
Дата добавления - 21.02.2014 в 12:14
egonomist Дата: Пятница, 21.02.2014, 12:47 | Сообщение № 26
Группа: Проверенные
Ранг: Прохожий
Сообщений: 9
Репутация: 3 ±
Замечаний: 0% ±

Я всегда запускаю в скрытом режиме, поэтому никогда не обращал внимания на новые окна.
Часто IE возвращает ReadyState = готово, раньше чем успевает прогрузиться страница (может это как то с обновлением кэша связанно - не знаю точно. Но у меня почти всегда так).
Поэтому я всегда ставлю дополнительную паузу
[vba]
Код
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления
[/vba]
экспериментально можно попробовать увеличить задержку.
другого лекарства я не нашел.


Мы все поломаем нашей силой ума

Сообщение отредактировал Serge_007 - Пятница, 21.02.2014, 22:54
 
Ответить
СообщениеЯ всегда запускаю в скрытом режиме, поэтому никогда не обращал внимания на новые окна.
Часто IE возвращает ReadyState = готово, раньше чем успевает прогрузиться страница (может это как то с обновлением кэша связанно - не знаю точно. Но у меня почти всегда так).
Поэтому я всегда ставлю дополнительную паузу
[vba]
Код
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления
[/vba]
экспериментально можно попробовать увеличить задержку.
другого лекарства я не нашел.

Автор - egonomist
Дата добавления - 21.02.2014 в 12:47
VIA Дата: Пятница, 21.02.2014, 15:58 | Сообщение № 27
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Пауза не играет роли в данном случае, переход бы осуществился, даже если страница не догрузилась.

Нашел в чем бага.
В настройках безопасности IE поставил галку "включить защищенный режим для интрасети" и все заработало.
Теперь буду пробовать жать на JAVAкнопки.
 
Ответить
СообщениеПауза не играет роли в данном случае, переход бы осуществился, даже если страница не догрузилась.

Нашел в чем бага.
В настройках безопасности IE поставил галку "включить защищенный режим для интрасети" и все заработало.
Теперь буду пробовать жать на JAVAкнопки.

Автор - VIA
Дата добавления - 21.02.2014 в 15:58
VIA Дата: Среда, 26.02.2014, 08:17 | Сообщение № 28
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
egonomist, Кстати в данном случае:
[vba]
Код
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления
[/vba] Ругается на Next without for, использую
[vba]
Код
Application.Wait (Now + TimeValue("0:00:01"))
[/vba]
Нажать на ссылку тоже не удалось, может IE8 ее не понимает?
[vba]
Код
Set SelectList = maPageHtml.getElementsbyclassname("Tab2Lnk")
[/vba] поэтому отправляю в IE URL с яваскриптом - так работает.


Сообщение отредактировал VIA - Среда, 26.02.2014, 08:20
 
Ответить
Сообщениеegonomist, Кстати в данном случае:
[vba]
Код
i = 0 : Do While i < 100000 : i = i + 1 : DoEvents : Loop : Next i 'пауза для обновления
[/vba] Ругается на Next without for, использую
[vba]
Код
Application.Wait (Now + TimeValue("0:00:01"))
[/vba]
Нажать на ссылку тоже не удалось, может IE8 ее не понимает?
[vba]
Код
Set SelectList = maPageHtml.getElementsbyclassname("Tab2Lnk")
[/vba] поэтому отправляю в IE URL с яваскриптом - так работает.

Автор - VIA
Дата добавления - 26.02.2014 в 08:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ссылка Javascript (Макросы Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!