Доступ к удаленному веб-сайту через VBA, автоматическое нажатие кнопки «Отправить» после автоматической нажатия кнопки на другой веб-странице - PullRequest
1 голос
/ 11 января 2012

Я работаю с VBA в Excel 2010 и Internet Explorer 8 и Vista.Код ниже работает, чтобы перейти на удаленный веб-сайт и опубликовать форму.На появившейся странице код должен нажать кнопку «получить оценки».Вместо этого я получаю эту ошибку «объектная переменная или переменная блока не установлена».Выделенная проблемная строка в коде - "оценивать = ieApp.document.getElementById (" btnRequestEstimates ")".

Я думаю, что часть проблемы может заключаться в том, что кнопка, которая не работает, является кнопкой отправки, которая не является частью формы.Мне также интересно, если переменные должны быть сброшены до 2-го нажатия кнопки.Сообщение об ошибке подразумевает, что это проблема квалификации, но я думаю, что это довольно стандартный способ квалификации элемента в этой ситуации.Вот некоторые вещи, которые я гуглял безрезультатно, я не совсем уверен, в чем проблема.

Sub btn_version()

Dim ieApp As Object
Dim ieDoc As Object
Dim ieForm As Object
Dim ieObj As Object
Dim URL As String
Dim estimate As Object

URL = "http://www.craft-e-corner.com/p-2688-new-testament-cricut-cartridge.aspx"
Set ieApp = CreateObject("InternetExplorer.Application")
ieApp.Visible = True
ieApp.navigate URL
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend

Set ieDoc = ieApp.document
Set ieForm = ieDoc.forms(1)
For Each ieObj In ieForm.Elements
If ieObj.ClassName = "AddToCartButton" Then
ieObj.Click
End If
Next ieObj

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
estimate = ieApp.document.getElementById("btnRequestEstimates")
estimate.submit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

End Sub

1 Ответ

3 голосов
/ 12 января 2012

Приведенный ниже код объединяет ваш код xmlhttp из , автоматизируя отправку формы публикации на веб-сайте с помощью vba и xmlhttp (чтобы дать вам лучший контроль над POST, т.е. пропустить раздел Set ieDoc = ieApp.documentв нашем вопросе) нажатием кнопки "btnRequestEstimates на окончательном URl с этой страницы

Sub Scrape2()

Dim objIE As Object
Dim xmlhttp As Object
Dim ieButton As Object
Dim strResponse As String
Dim strUrl As String

strUrl = "http://www.craft-e-corner.com/addtocart.aspx?returnurl=showproduct.aspx%3fProductID%3d2688%26SEName%3dnew-testament-cricut-cartridge"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.navigate "about:blank"
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")

'~~> Indicates that page that will receive the request and the type of request being submitted
xmlhttp.Open "POST", "http://www.craft-e-corner.com/addtocart.aspx?returnurl=showproduct.aspx%3fProductID%3d2688%26SEName%3dnew-testament-cricut-cartridge", False
'~~> Indicate that the body of the request contains form data
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
'~~> Send the data as name/value pairs
xmlhttp.Send "Quantity=1&VariantID=2705&ProductID=2688"
strResponse = xmlhttp.responseText
objIE.navigate strUrl
objIE.Visible = True

Do While objIE.readystate <> 4
    DoEvents
Loop

objIE.document.Write strResponse

Set xmlhttp = Nothing
Set ieButton = objIE.document.getelementbyid("btnRequestEstimates")
ieButton.Click

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