Drew Wutka
DWUTKA at Marlow.com
Fri Dec 10 16:33:05 CST 2010
Now for a little more info for you. Yes, you can certainly do this. Technically, it's not much different than if someone handed you an .mde, and asked you to automate tasks in the mde (so you couldn't tweak the source code running the program itself, but you could open the mde with VBA, and use the objects within it just like you'd use the objects in your own application.) Trick #1: Just like with an .mde, you have to have a reference to the database itself, so with a browser, you need a reference to it. You can either programmatically open a browser window (so you'll both create the object, and have a reference to it), or you can ask the user which browser window they want you to use (so you can grab the browser window through code). Here's an example of how to grab an existing browser window: Function GetExistingBrowser(strKey As String) Dim SWs As New SHDocVw.ShellWindows Dim IE As SHDocVw.InternetExplorer Dim mdie As InternetExplorer Dim Resp For Each IE In SWs Resp = MsgBox("Do you want to select: " & vbCrLf & vbCrLf & IE.LocationName & vbCrLf & vbCrLf & IE.LocationURL, vbYesNo + vbQuestion, "Select IE") If Resp = vbYes Then Set mdie = Nothing Set mdie = IE.Application NewSormDataEntry strKey, mdie Exit Function End If Next End Function The 'NewSormDataEntry' function is the function I am sending the mdie object too (the referenced browser window). In this function strKey is the primary key of a record that will be used in that NewSormDataEntry to submit data into a web site. Trick #2: Just like when the development world got a wedgie when Microsoft 'secured' Outlook from programs just using it to send email, web security can be a real pain in doing something like this. The security is put in place to impede (note, I didn't say prevent) a hacker from doing nasty stuff to the site. So the 'impeding' garbage designed to trip up hackers can get in the way of a legitimate developer trying to create a helpful tool. So before you COMMIT to being able to make the tool, you'll need to look at the site itself, to see what all will get in your way. Trick #3: There are two ways to 'find' the objects you will need your code to work with. The first is to just look at the HTML of the page(s) you are going to manipulate. This is where some of those 'impediments' come into play. Some sites prevent you from right clicking on a page and selecting 'View Source'. Ironically, this is just removing a 'shortcut' way to view the HTML source behind a page. It doesn't actually HIDE the source, because your browser is viewing the source, it has too, otherwise it will have nothing to display. So there are multiple ways to 'download' the HTML you can view yourself. Create your own browser, and dump the HTML to a file. You can also use API calls to just directly download the HTML, without a browser. If the page is derived from internal (on the website server) variables, you'll need to use your own browser to get there and download the source. The second way to 'find' the objects you need to deal with are with the object browser. Running your code in debug mode, you'll be able to see the browser object, and all of it's child elements. Trick #4: Events and properties. Setting the value of a textbox, or clicking a button, just requires that you know what the events and properties of those objects are. I use the MSDN that came with the developer edition of Office 2000. It's got a nice HTML guide with common HTML form elements, their properties, methods, and events. But all that information is also plastered all over the web. Trick #5: When a page loads, the browser object is there, but you may not be able to capture 'download complete' events. What I have done in these cases, where my code puts in data on a page, clicks a button to go to the next page, I put my code in a loop, that sits and waits for an object from the next page to exist. Of course, if there are applets, or flash media elements, required for interaction... can't help ya there, haven't tackled one of those. Drew -----Original Message----- From: dba-vb-bounces at databaseadvisors.com [mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: Friday, December 10, 2010 3:30 PM To: VBA Subject: [dba-VB] Web page manipulation My client has to go through a process where he clicks about 20 - 30 things to manage to get a file downloaded. It sounded totally convoluted but the question is (and I have asked this before without a usable response) can I programmatically manipulate web pages to cause specific pages to open, click buttons, input data into controls etc. -- John W. Colby www.ColbyConsulting.com _______________________________________________ dba-VB mailing list dba-VB at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-vb http://www.databaseadvisors.com The information contained in this transmission is intended only for the person or entity to which it is addressed and may contain II-VI Proprietary and/or II-VI Business Sensitive material. If you are not the intended recipient, please contact the sender immediately and destroy the material in its entirety, whether electronic or hard copy. You are notified that any review, retransmission, copying, disclosure, dissemination, or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited.