Ситуация такакя: небходим макрос, который будет копировать данные ячеек и вставлять их input-поля на сайте. Например: У меня в IE открыта страница (официального гос ресурса) - http://fssprus.ru/iss/ip/ Мне надо, чтобы из ячейки А1 данные вставлялись в <input type="text" name="is[last_name]" Из ячейки А2 в <input type="text" name="is[first_name] А3 - выбрать регион <select name="is[region_id][0]
Кнопку submit и код проверки я буду вводить сам.
Огромное спасибо.
Добрый день!
Ситуация такакя: небходим макрос, который будет копировать данные ячеек и вставлять их input-поля на сайте. Например: У меня в IE открыта страница (официального гос ресурса) - http://fssprus.ru/iss/ip/ Мне надо, чтобы из ячейки А1 данные вставлялись в <input type="text" name="is[last_name]" Из ячейки А2 в <input type="text" name="is[first_name] А3 - выбрать регион <select name="is[region_id][0]
Dim WebBrowser As Object Set WebBrowser = CreateObject("InternetExplorer.Application") WebBrowser.Visible = True WebBrowser.Navigate "http://fssprus.ru/iss/ip/" Do While Not (WebBrowser.ReadyState = 4) DoEvents Loop Set he = WebBrowser.Document.body.all("is[region_id][0]") he.SetAttribute "value", "28" '<option value="28">Амурская область</option> Set he = WebBrowser.Document.body.all("is[last_name]") he.SetAttribute "value", "из ячейки А1" Set he = WebBrowser.Document.body.all("is[first_name]") he.SetAttribute "value", "Из ячейки А2 "
[/vba]
классная постановка вопроса.
Цитата
небходим макрос Мне надо
А что есть у вас? Дальше сами [vba]
Код
Dim WebBrowser As Object Set WebBrowser = CreateObject("InternetExplorer.Application") WebBrowser.Visible = True WebBrowser.Navigate "http://fssprus.ru/iss/ip/" Do While Not (WebBrowser.ReadyState = 4) DoEvents Loop Set he = WebBrowser.Document.body.all("is[region_id][0]") he.SetAttribute "value", "28" '<option value="28">Амурская область</option> Set he = WebBrowser.Document.body.all("is[last_name]") he.SetAttribute "value", "из ячейки А1" Set he = WebBrowser.Document.body.all("is[first_name]") he.SetAttribute "value", "Из ячейки А2 "
doober, огромнейшее спасибо!!!!!!!! Всё работает. Но чтобы быть довольным на все 100% хотельсь бы, сделать так, чтоб при каждом запросе, IE открывался не в новом окне, а в новой вкладке.
Ещё раз спасибо.
doober, огромнейшее спасибо!!!!!!!! Всё работает. Но чтобы быть довольным на все 100% хотельсь бы, сделать так, чтоб при каждом запросе, IE открывался не в новом окне, а в новой вкладке.
KSV, что-то так не работает. Ну это и не столь важно. Всё равно спасибо.
Назрел ещё вопросик. Есть такой код: [vba]
Код
Dim WebBrowser As Object Set WebBrowser = CreateObject("InternetExplorer.Application") WebBrowser.Visible = True WebBrowser.Navigate "https:ляляля" Do While Not (WebBrowser.ReadyState = 4) DoEvents Loop
Set he = WebBrowser.Document.body.all("Name") he.SetAttribute "value", "логин" Set he = WebBrowser.Document.body.all("Password") he.SetAttribute "value", "11111111" Set he = WebBrowser.Document.body.all("submit") he.Focus he.Click
T = Now Do While Not (WebBrowser.ReadyState = 4) If Now - T >= 5 / 86400 Then Exit Do DoEvents Loop
Set he = WebBrowser.Document.body.all("document.fl.go.click()") he.onClick
[/vba]
Так вот не нажимается на этот document.fl.go.click()
KSV, что-то так не работает. Ну это и не столь важно. Всё равно спасибо.
Назрел ещё вопросик. Есть такой код: [vba]
Код
Dim WebBrowser As Object Set WebBrowser = CreateObject("InternetExplorer.Application") WebBrowser.Visible = True WebBrowser.Navigate "https:ляляля" Do While Not (WebBrowser.ReadyState = 4) DoEvents Loop
Set he = WebBrowser.Document.body.all("Name") he.SetAttribute "value", "логин" Set he = WebBrowser.Document.body.all("Password") he.SetAttribute "value", "11111111" Set he = WebBrowser.Document.body.all("submit") he.Focus he.Click
T = Now Do While Not (WebBrowser.ReadyState = 4) If Now - T >= 5 / 86400 Then Exit Do DoEvents Loop
Set he = WebBrowser.Document.body.all("document.fl.go.click()") he.onClick
[/vba]
Так вот не нажимается на этот document.fl.go.click()
ЗахаровСергей, зачем же вычисления с константами гонять в цикле? Или результат выражения 5/86400 может меняться от случая к случаю? Проц нужно жалеть... Можно же один раз вычислить, а в цикле только сравнивать: [vba]
Код
T# = Now + 5 / 86400 Do While WebBrowser.ReadyState <> 4 If Now >= T Then _ If MsgBox("Время ожидания истекло." & vbCr & vbCr & "Подождать еще 5 сек.?", vbQuestion Or vbYesNo, ThisWorkbook.Name) = vbYes Then _ T = Now + 5 / 86400 Else _ Exit Do DoEvents Loop
[/vba]
doober, мне кажется, что fl и go это у него элементы (он же html-код не показывает), тогда можно так: [vba]
Код
Set he = WebBrowser.Document.body.all("go") he.Click
[/vba]
ЗахаровСергей, зачем же вычисления с константами гонять в цикле? Или результат выражения 5/86400 может меняться от случая к случаю? Проц нужно жалеть... Можно же один раз вычислить, а в цикле только сравнивать: [vba]
Код
T# = Now + 5 / 86400 Do While WebBrowser.ReadyState <> 4 If Now >= T Then _ If MsgBox("Время ожидания истекло." & vbCr & vbCr & "Подождать еще 5 сек.?", vbQuestion Or vbYesNo, ThisWorkbook.Name) = vbYes Then _ T = Now + 5 / 86400 Else _ Exit Do DoEvents Loop
[/vba]
doober, мне кажется, что fl и go это у него элементы (он же html-код не показывает), тогда можно так: [vba]
Код
Set he = WebBrowser.Document.body.all("go") he.Click
ЗахаровСергей, а для чего так извращаться? прокрути скролингом и координаты изменятся!... твои задачи легко и изящно решаются прямыми обращениями непосредственно к самим объектам через DOM. как это делается тебе на примере показал doober еще в первом ответе, но ты упорно "ищешь" способы, один изощреннее другого!... [p.s.]а если ты сам не знаешь, как "отловить" нужный тебе объект, то кинь сюда кусок html-кода, описывающий этот объект (а если у него нет собственных атрибутов идентификации, то еще и тэг его родителя, для понимания структуры документа) и тебе напишут, как это сделать.
ЗахаровСергей, а для чего так извращаться? прокрути скролингом и координаты изменятся!... твои задачи легко и изящно решаются прямыми обращениями непосредственно к самим объектам через DOM. как это делается тебе на примере показал doober еще в первом ответе, но ты упорно "ищешь" способы, один изощреннее другого!... [p.s.]а если ты сам не знаешь, как "отловить" нужный тебе объект, то кинь сюда кусок html-кода, описывающий этот объект (а если у него нет собственных атрибутов идентификации, то еще и тэг его родителя, для понимания структуры документа) и тебе напишут, как это сделать.KSV
[/vba] для симуляции клика я вижу 2 пути решения... 1. получить/отловить сам объект go и выполнить на нем клик. 2. отловить указанную выше ссылку и выполнить клик на ней. но ни для того, ни для другого, недостаточно предоставленных тобой сведений.
ЗахаровСергей, я так понимаю, ты все еще "решаешь" проблему с кликом на этой ссылке? [vba]
[/vba] для симуляции клика я вижу 2 пути решения... 1. получить/отловить сам объект go и выполнить на нем клик. 2. отловить указанную выше ссылку и выполнить клик на ней. но ни для того, ни для другого, недостаточно предоставленных тобой сведений.KSV
ну, так и есть... как и предполагалось ранее - форма fl с элементом (кнопкой) go, а соответственно, возникает несколько нюансов, например, как эта форма внедрена?... короче, не вдаваясь в подробности, попробуй вот так: [vba]
Код
Set he = WebBrowser.document.body.all("fl")("go") he.Click
[/vba] у меня получилось, правда на простом примере... короче, попробуй, может и тебе повезет (в смысле, на твоем сайте форма тоже внедрена без заморочек)
ну, так и есть... как и предполагалось ранее - форма fl с элементом (кнопкой) go, а соответственно, возникает несколько нюансов, например, как эта форма внедрена?... короче, не вдаваясь в подробности, попробуй вот так: [vba]
Код
Set he = WebBrowser.document.body.all("fl")("go") he.Click
[/vba] у меня получилось, правда на простом примере... короче, попробуй, может и тебе повезет (в смысле, на твоем сайте форма тоже внедрена без заморочек)KSV
при первом прочтении по слову без я подумал, что твоя задача успешно решена, но твое последнее сообщение заставило меня в этом усомниться... так без заморочками - это как? у тебя получилось эмулировать клик на кнопке формы или нет? если нет, то напиши, удалось ли получить элемент WebBrowser.document.body.all("fl")("go") ? (у меня это работает, но на "простом" примере, т.е. я просто создал страничку с твоим кодом и успешно эмулировал клик на кнопке "go". адрес странички могу написать - сам попробуешь) [p.s.]ну, и не забывай, что остается еще, как минимум, второй вариант - эмулировать клик на ссылке <a title="" class="menu_blue" ... onclick="document.fl.go.click()">, но для этого тебе нужно показать ее предка, которого можно идентифицировать...
при первом прочтении по слову без я подумал, что твоя задача успешно решена, но твое последнее сообщение заставило меня в этом усомниться... так без заморочками - это как? у тебя получилось эмулировать клик на кнопке формы или нет? если нет, то напиши, удалось ли получить элемент WebBrowser.document.body.all("fl")("go") ? (у меня это работает, но на "простом" примере, т.е. я просто создал страничку с твоим кодом и успешно эмулировал клик на кнопке "go". адрес странички могу написать - сам попробуешь) [p.s.]ну, и не забывай, что остается еще, как минимум, второй вариант - эмулировать клик на ссылке <a title="" class="menu_blue" ... onclick="document.fl.go.click()">, но для этого тебе нужно показать ее предка, которого можно идентифицировать...KSV