In VBA after automated xml form post, how can I automate interaction with the response?

3.8k Views Asked by At

I am using xml in VBA. The code below adds an item to a shopping cart on a remote website (posts a form). Then the code displays the result in Internet Explorer.

You can see in the response there is a "get estimates" button. I need to automatically click that, enter location info, and get the response of shipping and tax charges (for the item currently in the cart) on my excel 2010 worksheet.

I want all the automated clicking and entering data to happen with the site (the site's server?) directly like when I added the item to the shopping cart, not through the browser if possible. It takes a long time for the page to load and I think if I go through a browser I could do that without xml anyway. But I'm really stuck so if I have to load a browser that's okay too.

Option Explicit

Sub testing()
    Dim objIE As Object
    Dim xmlhttp As Object
    Dim response As String
     Set objIE = CreateObject("InternetExplorer.Application")
    objIE.navigate "about:blank"
    objIE.Visible = True
    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"
     response = xmlhttp.responseText
    objIE.Document.Write response
    Set xmlhttp = Nothing
End Sub
1

There are 1 best solutions below

0
On

What you can do is:

  • Use XMLHTTP to retrieve the source of the page
  • Use the MSHTML object model to further automate the page

Example: An exploration of IE browser methods, part II

What the code on this page does is:

  • Take advantage of XMLHTTP's speed to retrieve a webpage source faster than automating IE
  • Assign the XMLHTTP response to a MSHTML Document object (effectively 'loading' the page inside the DOM), then
  • Use traditional OM methods for looping through page objects, clicking buttons and so on.

At the risk of self-aggrandizement, Tim's advice is spot on. The link he provided has several methods you could use (after getting the page using XMLHTTP, of course) for either iterating through the page and clicking the "Get Estimates" button, or setting a reference to it directly and calling the HTMLInputElement.Click method.