Страницы: 1
RSS
Сложный веб запрос
 
Помогите пожалуйста.Есть страница html с которой делается запрос данных, на которой необходимо выбрать: Выбор:поробы, Интервал проб: Все (то есть от 1 до 100) , Временной интервал: лучше форму с выбором даты (либо просто Сегодня), Фильтр по марке: Все.  
Прикрепил архив ,там два html файла, первый ,это страница для ввода "http://10.2.19.215/xim.html", а вторая это куда нужно попасть "http://10.2.19.215/cgi-bin/xim.cgi".Это локалка туда не попасть ,только с работы.  
Можно ли сделать такой запрос из excel ,что бы получить таблицу на лист и обновлять её.  
Помогите а.
 
к сожалению тут пока ничем помочь нельзя-  
на первой страничке собираются параметры,  при нажатии кнопки выбор запускается скрипт  
/cgi-bin/xim.cgi (скрипт либо на вашей машине либо на сервере, но не на html страничке)  
который уже собирает даннные о параметрах и далее готовит таблицу. внести как-нибудь параметры в сам скрипт через excel не представляется возможным (имхо).  
 
Вот если бы скрипт был в страничке - тогда можно было помочь.
 
я погорячился - передать параметры можно и кнопку нажать можно.  
во вложении пример - который при нажатии на кнопку должен передауать параметры на страничку, а потом нажимать кнопку. Следующий шаг - обработать полученный ответ.  
на след недели посмотрю.
 
Спасибо тебе огромное, на работе буду проверять.  
 
Жду следующей недели с нетерпением.  
Пока буду пережевывать то что уже есть  
не могу понять что это  .elements(2) , elements(14) и.т.д.  ладно фиг с ним ,лишь бы потом всё работало.
 
Товарищ, проверь, во вложении файл, немного подправил.  
На листе забиваем нужные параметры. нажимаем кнопку open - открывается пользовательская форма - в ней webbrowser -    
на событие открытия формы повешен макрос передачи параметров с листа на страничку.  
на форме кнопка поехали - по идее должна нажимать кнопку выбор на страничке  
код с комментариями.  
 
Цель - проверить съест ли страничка эту шнягу - правильно ли передаются параметры, открывается ли 2 страничка корректно при нажатии на кнопу???  
 
Нужен feedback - если все ок - будем дальше думать.
 
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>  
<EM>http://www.planetaexcel.ru/forum.php?thread_id=8735</EM>
 
Привет.  
Блин с ночной только встал и увидел, ща только в среду на работу, там проверю.  
Вот что я на проверял на прошлом примере:  
Пришел на работу установил туда Fiddler2 она регистрирует весь трафик(во вложении есть).  
Ну и начал запускать с Internet ExplorerА заводской запрос на химию 175 пункт  
и твой первый пример 700 и 701 пункт.  
Ну короче что то не получилось, запросы не много разные.  
 
Вот заводской запрос:  
typesel=1&V_PR1=1&V_PR2=100&RBC=%C2%F1%E5+%EF%F0%EE%E1%FB&V_­D1=11.02.2012&V_D2=12.02.2012&V_N1=&V_N2=&V_M=&KEY=%C2%F1%E5+%EF%EB%E0%E2%EA%E8&Submi­t2=%C2%FB%E1%EE%F0  
 
А это твой пример:  
typesel=1&V_PR1=1&V_PR2=100&RBC=%CF%E5%F7%ED%FB%E5+%EF%F0%EE­%E1%FB&V_D1=2%2F10%2F2012&V_D2=2%2F11%2F2012&V_N1=undefined&­V_N2=undefined&V_M=&KEY=%C2%F1%E5+%EF%EB%E0%E2%EA%E8&Submit2­=%C2%FB%E1%EE%F0  
 
Во вложении есть файл  Fiddler2.saz он открывается с помощью  Fiddler2, вот там выбираешь с лева 700 файлик ,а с права вверху вкладку WebForms, там наш запрос с параметрами, а в низу открываешь вкладку WebViev, та то что приходит.  
Наш запрос можно сравнить с заводским это пункт 175, разница есть.  
Как все сделать правильно не волоку не фига, то ли формат даты не подходит.  
Поковыряйся пожалуйста.  
 
Это полная ссылка  
http://zalil.ru/32697799/372c61f5.4f39a658/%D1%81%D0%BE%D1%85%D1%80_%D0%B7%D0%B0%D0%BF%D1%80.rar
 
привет, fiddler у меня не работает, наверное из-за прокси, а как его правильно настроить - не знаю. Выкладываю новую версию, предыдущую не смотри.    
Изменил формат дат, подчистил косяки, добавил выбор дат и экспорт таблицы на лист.  
пока для тестирования оставил форму с браузером.  
При открытии загружается форма с интернет страничкой - смотрим как заполнились параметры. Жмем кнопку поехали - проверяем есть ли результат.  
 
Если будет на что то ругаться - пришли скин и текст запроса из fiddler.
 
Спасибо, буду проверять.
 
Аааа прикинь получилось, спасибо тебе большое товарищ :),ты мне очень сильно помог. Вы не из Челябинска случайно?  
Только подправить осталось.  
Короче открываю пример, запускается форма, и в не все как положено (как на листе),нажимаю на кнопку поехали и получается что на лист table копируется страничка с запросом то есть первая. Попробовал нажать не поехали ,а выбор, получилось что в браузере перешел на страничку с нужной таблицей и поменял не много код:  
Private Sub CommandButton1_Click()  
UserForm1.Hide 'скрваем форму  
'Me.WebBrowser1.Document.forms(0).elements(27).Click 'нажать кнопку выбор  
'Me.WebBrowser1.Document.forms(0).submit 'или вот так - результат должен быть тем же  
's = "C:\2.htm" '  
'Me.WebBrowser1.Navigate (s)  
Do While Me.WebBrowser1.busy Or (Me.WebBrowser1.ReadyState <> 4): DoEvents: Loop  
Set maPageHtml = Me.WebBrowser1.Document  
Set Htable = maPageHtml.getElementsByTagName("table") 'objet type table  
Set maTable = Htable(1) ' the first table  
Worksheets("table").Cells.ClearContents 'удаляем все предыдущие записи на листе table  
'запускаем цикл по всем ячейкам - последовательно заносим их на лист  
For i = 1 To maTable.Rows.Length ' table rows  
   For j = 1 To maTable.Rows(i - 1).Cells.Length ' each cell of the row  
       Worksheets("table").Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText  
   Next j  
Next i  
 
Worksheets("Table").Select  
Set maPageHtml = Nothing  
End Sub  
 
то есть просто поставил кавычку ' перед Me.WebBrowser1.Document.forms(0).elements(27).Click  
и всё с копировалось на лист.  
Толи страница не успевает загружаться, можно там как ни будь таймер поставить?  
 
А так всё четко,вы молодец.
 
Интересно без браузера получится?
 
Привет, держи - без браузера. Добавил задержку на несколько секунд - вроде бы нормально работает. Сейчас на листе 2 кнопки - с формой и без формы. На форме попробуй кнопку автомат. если все равно страничка не успевает загрузится - в коде  
попробуй взять число больше 10000    
 
Do While i < 10000    
i = i + 1  
DoEvents  
Loop  
 
если все ок - то можно работать нажимая кнопку без формы (запускает макрос avto из Module1).  
если и эта кнопка работает - тогда кнопку c формой можно удалить с листа.  
Можно будет сделать обновление данных при открытии книги или обновление по расписанию.    
 
p.s: я из самары:)  
 
убрал автозапуск формы при открытии.
 
egonomist, а зачем так сложно? Может попробовать так ввести задержку выполнения:  
 
Application.Wait (Now + TimeValue("0:00:03"))  
---------------------------------------  
Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)  
 
Sleep 3000
 
sleep тут не работает, пробовал.  
Application.Wait - надо выставлять время задержки - 1,2 секунды , это же время выполняется цикл. результат один и тот же - что под рукой было то первым и поставил.  
1 строчка или 4 ни на скорости ни на результате не сказываются.  
 
Если цель - минимизация времени обработки, уменьшение загрузки цп и т.д (например, торговый робот) то тут уж конечно следует следить за чистотой кода и использовать Application.Wait.  
Если цель - получить результат после небольшой паузы, то можно и не париться особенно по поводу кода.
 
Спасибо, сегодня в ночь буду проверять.
 
Сегодня ночью всё проверил, работает на ура, без формы тоже.  
Мне уже не удобно просить, но возникла другая проблема.  
В вашем примере работает всё быстро, но как только я перенёс всё к себе в программу все жутко за тормозило так как там много вычислений связанных с данными этой таблички. То есть  тормозить начинает когда данные переносятся на лист :  
 
For i = 1 To maTable.Rows.Length ' table rows  
   For j = 1 To maTable.Rows(i - 1).Cells.Length ' each cell of the row  
       Worksheets("table").Cells(i, j) = maTable.Rows(i - 1).Cells(j - 1).innerText  
   Next j  
Next i  
 
Я вот думаю,возможно ли в начале кода отключать "автоматическое вычисления в книге" ,а в конце когда все данные таблички будут на листе, включать "автоматическое вычисления".  
Пробовал отключать в ручную в меню, табличка загружалась на много быстрее, а потом включаю.    
И еще бы типа Флажка на лист или кнопки ,чтоб табличка обновлялась через заданный промежуток времени.  
Я вас наверное уже замучил.
 
Stalevar, в начале кода  
with Application  
.ScreenUpdating = false  
.Calculation = xlManual  
end with  
В конце включить    
with Application  
       .Calculation = xlAutomatic  
       .ScreenUpdating = True  
   End With
 
Спасибо. Вот еще что нашел :  
Application.Calculation = xlManual 'выключить автоматическое вычисления  
 
Application.Calculation = xlAutomatic 'включить автоматическое вычисления  
   
Подскажите чем от вашего отличается.
 
Привет!!! Товарищ! Держи - отключил вычисления  
Application.Calculation = xlManual    
Application.Calculation = xlAutomatic    
у Игоря записано тоже самое, только в другом виде.  
 
Добавил таймер. в ячейке с7 можно выставить через периодичность обновления в минутах. Но таймер работает только когда книга открыта и является активной.    
 
Написал еще скрипт pusk.vbs для запуска обновления с помощью планировщика windows.  
Его нужно открыть в блокноте - указать свой путь к файлу. в планировщике создать новую задачу - выбрать этот скрипт и указать как когда и как часто запускать обновление.  
 
Недостаток всего проекта - отсутсвие привязки к книге. То есть если будет открыта и активна другая книга excel - обновление не пройдет. Чтобы избавиться от этого недостатка надо точно знать имя книги.    
если имя книги постоянное и не менятеся тогда в коде везде перед    
worksheets("Main") и worksheets("Table") надо поставить Workbooks("имя книги").  
т.е было worksheets("Main").Range("C7") будет    
Workbooks("имя книги").worksheets("Main").Range("C7")  
просто я не знаю точного имени книги - поэтому не добавлял это.  
 
p.s:у меня на работе нет работы до конца месяца, хоть так развлекаюсь
 
У тебя очень полезное и доброе развлечение (: Спасибо.
 
Прошу помощи.  
Можно ли сделать без формы ,а то она моргает постоянно.  
 
 
Private Sub UserForm_Activate()  
On Error GoTo 1  
UserForm1.Hide  
If dt1 <= 0 Then  
dt1 = Now  
dt2 = Now + 1  
End If  
s = ("http://10.2.19.215/xim.html") 'первая ссылка  
 
Me.WebBrowser1.Navigate (s) 'переходим на ссылку  
Do While Me.WebBrowser1.busy Or (Me.WebBrowser1.ReadyState <> 4): DoEvents: Loop ';ждем загрузки страницы  
 
v_pr1 = v_prob1 'интервал проб начало  
v_pr2 = v_prob2 'интервал проб конец  
v_D1 = Format(CDate(dt1), "dd/mm/yyyy") 'временной интервал начало  
v_D2 = Format(CDate(dt2), "dd/mm/yyyy") 'временной интервал конец  
v_N1 = Plavka1 'интервал плавок начало  
v_N2 = Plavka2 'конец  
 
 
'заносим параметры на страничку  
'elements - это элементы странички - текстовые поля, кнопки и т.д  
'forms(0) - сама страничка  
   Me.WebBrowser1.Document.forms(0).elements(0).Checked = True 'ставим точку пробы  
 
Me.WebBrowser1.Document.forms(0).elements(13).Checked = True ' точка все  
'интервал проб  
Me.WebBrowser1.Document.forms(0).elements(2).Value = v_pr1  
Me.WebBrowser1.Document.forms(0).elements(3).Value = v_pr2  
 
'временной интервал  
 
Me.WebBrowser1.Document.forms(0).elements(14).Value = v_D1  
Me.WebBrowser1.Document.forms(0).elements(15).Value = v_D2  
'интервал плавок  
Me.WebBrowser1.Document.forms(0).elements(16).Value = v_N1  
Me.WebBrowser1.Document.forms(0).elements(17).Value = v_N2  
Me.WebBrowser1.Document.forms(0).elements(19).Checked = True 'точка все  
 
DoEvents 'функция простоя  
Me.WebBrowser1.Document.forms(0).submit ' выбор  
 
DoEvents 'функция простоя  
Application.Calculation = xlCalculationManual  
Application.ScreenUpdating = False  
Do While Me.WebBrowser1.busy Or (Me.WebBrowser1.ReadyState <> 4): DoEvents: Loop  
Set maPageHtml = Me.WebBrowser1.Document  
Set Htable = maPageHtml.getElementsByTagName("table")  
Set maTable = Htable(1) ' the first table  
Worksheets("table").Cells.ClearContents 'удаляем все предыдущие записи на листе table  
'запускаем цикл по всем ячейкам - последовательно заносим их на лист  
For i = 1 To maTable.Rows.Length ' table rows  
'DoEvents  
   For J = 1 To maTable.Rows(i - 1).Cells.Length ' each cell of the row  
   'DoEvents  
       Worksheets("table").Cells(i, J) = maTable.Rows(i - 1).Cells(J - 1).innerText  
   Next J  
Next i  
 
Set maPageHtml = Nothing  
'End If  
DoEvents  
Application.Calculation = xlCalculationAutomatic  
Application.ScreenUpdating = True  
Exit Sub  
1  
Application.Calculation = xlCalculationAutomatic  
Application.ScreenUpdating = True  
MsgBox "Нет данных"  
End Sub
 
Получается что вот так можно без формы ,а просто модуль:  
 
Dim oIE As Object  
Set oIE = CreateObject("InternetExplorer.Application")  
s = ("www.yandex.ru") 'первая ссылка  
oIE.Navigate (s) 'переходим на ссылку  
Set maPageHtml = oIE.Document  
 
 
 
А вот так не пашет без формы:  
 
 
 
s = ("www.yandex.ru") 'первая ссылка  
WebBrowser1.Navigate (s) 'переходим на ссылку  
Set maPageHtml = WebBrowser1.Document
 
egonomista не хватает.
Страницы: 1
Читают тему
Loading...