Страницы: 1
RSS
Макрос открытия вебсайта с вводом логина и пароля
 
Sub info()  
Dim oIE As Object  
Dim tmp, i As Long  
Set oIE = CreateObject("InternetExplorer.Application")  
oIE.Visible = 0 ' не отображать окно Интернет Эксплорера 0/1 отображать  
oIE.Navigate ("http://www") 'сайт  
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока браузер загрузится  
oIE.Document.forms("pform").elements("camusername").Value = "111" 'вводим логин  
oIE.Document.forms("pform").elements("campassword").Value = "1234" 'вводим пароль  
oIE.Document.forms("pform").elements("cmdok").Click 'нажимаем ОК  
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока браузер загрузится  
oIE.Visible = 1  
End Sub  
 
Пошагово этот код выполняется прекрасно.При обычном запуске макроса выдаёт    
Run-time error '91': Object variable or With block variable not set  
В чём проблема понять не могу.
 
Собственно проблему пока решил строчкой кода:  
Application.Wait Now + 1 / 86400  
Но мне не кажется этот способ достаточно разумным. И не пойму, почему в первом случае не работает.  
Появилась новая проблема. Нужно дальше гулять по сайту, кликая на определенные кнопки. Проблема в том, что я не могу определить ни id, ни forms этих кнопок. Код 2-х из них выглядит примерно так:  
 
Утверждение УЭиП  
 
Утверждение УЭиП  
Не пойму, как к ними обращаться. Название самих кнопок разные.  
И ещё - пытался поиграться с этим способом скачивания документов - http://excelvba.ru/code/DownloadFile. Возникла проблема в том, что огромные ссылки просто не хотят влазить, даже если дробить _. Интересно, каким образом можно решить эту проблему.  
Заранее благодарю.
 
в watch window перебирайте elements формы и смотрите что куда.   
http://www.planetaexcel.ru/forum.php/?thread_id=38428
 
Проблема усложняется тем, что формы нет. Есть фреймсет, в нем ещё штук 8 фреймов. По указанному вами методу, перебор не идёт, да и искать через Watch крайне неудобно - считай, что копаться в HTML. В принципе, интересует каким ещё образом можно обращаться к объектам на странице. Можно ли задавать путь, скажем, таким образом /html/body/table[2]/tbody/tr/td/div/table[4]/tbody/tr[2]/td/table/tbody/tr/td/a?
 
тогда вам в помощь getelementsbyid и GetElementsByTagName  
 
http://www.access-programmers.co.uk/forums/showthread.php?t=176968  
 
http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.getelementbyid.aspx  
 
#50151#
 
К сожалению страница формируется программой, и id, tagname не проставляет. Если и есть возможность, то только переходом по фреймам и выбору по строке, столбцу в табличке.  
 
В принципе, интересует уже второй вопрос. Есть длиннющий xml запрос. В vba не влазиет. Как быть?
 
Утверждение УЭиП  
 
а это что такое? id="hal__el__uniqueID__4">  
 
в смысле не помещается???
 
Ну да - не совсем корректно выразился. Id либо нет, либо он для всех объектов во фрейме одинаковый.    
 
Пытаюсь запихнуть его oIE.Navigate ("код ХМL"). Он туда не влазит и оказывается на следующих строках.
 
{quote}{login=Ioni4}{date=20.07.2012 12:55}{thema=}{post}Id либо нет, либо он для всех объектов во фрейме одинаковый.{/post}{/quote}  
Передавайте привет тому, кто делал : )  
Id - это уникальный идентификатор
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Да я в курсе, сам был неприятно удивлён. Айтишники говорят, что страничка формируется програмкой, т.е. претензии по идее к IBM. Насколько правда - не знаю, но по факту - вот такой случай.
 
For Each a In webbr.Document.getElementsByTagName("a") 'выбираем все с тегом <a..>  
       s = a.outerHTML 'тут все что перечислено внутри тега  
       s = Mid(s, InStr(1, s, "(") + 1, 1) 'выбираем из (7,0,0 ) первый аргумент  
       Debug.Print s  
       If s = "1" Then 'если на onclick return open_onclick(1,0,0 )  
       a.Focus 'выделили ссылку  
       a.Click 'кликнули ее  
       End If  
       Next a
 
Спасибо, поковыряюсь.  
Всё таки хотелось бы ещё разобраться с запросом - почему не влазиет. Хочу сейчас попробывать разбить на части, присвоить переменным и собрать через &. Но почему-то кажется проблема не в этом.
 
В итоге разобрался в запросе, вырезал длиннющий кусок с кодом для программного фаервола и забил на объекты с дурацкой страницы. Теперь возникли новые вопросы, но по ним уже создам новую темку. Всем спасибо, тему можно закрывать.
Страницы: 1
Наверх