Question

View Web Page Source in VB6

Asked by: dentab

I would like to be able to obtain the source from a web-browser control programaticallly.

1) This must not be by requesting from the server again via the Inet control or simular, another request to the server will return a different result.
2) It has to be the RAW source as sent to the browser, not what IE has interpereted it as so document.outerHTML would not be it, there is a difference.

I have found somemthing for VB 2003, but I do not know if it can be converted for VB6.
http://www.codeproject.com/KB/cs/multitabwebbrowser.aspx?msg=1143316
http://support.microsoft.com/kb/311288

You help is appreciated

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-11-02 at 08:00:16ID24863995
Tags

Visual Basic

,

View Source

,

VB6

,

WebBrowser

,

Web control

Topics

Visual Basic Programming

,

VB Controls

Participating Experts
3
Points
500
Comments
13

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Is this a Bug with VB6's Inet
    I noticed when I use VB6 version of the msinet.ocx and do a Inet1.OpenUrl(URL, 0) it downloads the html files ok but alway inserts a double quote " at the beginning and end of each html page downloaded. Is that a Bug or do i need to call it differently?
  2. Problem using Inet control in VB6
    Hi all, It's not so much a problem with the Inet control but the amount of data that it returns. I'm using the following line mystring = inet1.OpenURL(my_url) however if the url returns a large stream of data then my variable mystring cannot store it. I've tried dumping the...
  3. inet in VB.net
    hello experts help needed... i would like to know what is the equivalent for Inet component of Vb6 in Vb.net... I used to do Inet.openURL("myurl") to get the html ... how do we do that in VB.net... any code would be appreciated very much.. Thanks in advance
  4. INET Freezes (VB6)
    I have a Visual Basic 6 program that uses INET, and constantly makes inet requests using a timer. This program used to work quite well, and then i reformatted my computer. Now, the same program (I put it on a CD) freezes within about 5 minutes of running it. It works well ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: bobpsmithPosted on 2009-11-02 at 08:25:29ID: 25720783

 

by: dentabPosted on 2009-11-02 at 08:38:46ID: 25720908

no see my it not must be #1

that would involve making a 2nd request to the server to get the source...

i.e. the web browser asks for a page
then I ask for the page again to get the source.

The results can vary then between the two, for example if the page provides a page-counter, the web-browser control might show "101" but the source would show "102" if this method were used.  

It is important that this does not happen for my application.

 

by: dentabPosted on 2009-11-03 at 00:38:48ID: 25726982

note also, it used to be possible to obtain the source from cache by going to
"view source: url"
but this "protocol" is no longer supported (IE7, IE8)

 

by: FER_GPosted on 2009-11-03 at 04:08:08ID: 25728101

dentab; did you prove the innerHTML property, instead of outerHTML ?

Best Regards.
Ferg
--
Ing. Fernando D. Giletta
San Francisco. Córdoba. Argentina.

Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
   'saber si se completo la carga de la pagina completa.
   If (pDisp Is WebBrowser1.object) Then 
        If (WebBrowser1.LocationURL <> "about:blank") And (WebBrowser1.LocationURL <> "") Then
           debug.print WebBrowser1.Document.body.innerHTML
        end if
   end if
End Sub

                                              
1:
2:
3:
4:
5:
6:
7:
8:

Select allOpen in new window

 

by: dentabPosted on 2009-11-04 at 01:05:44ID: 25737542

it doesnt matter neither innerHTML/outerHTML will do. (See my it not must be #2)

That does not return the source, it returns what IE Interprets the source to be - I need it to be accuratey what the source ACTUALLY is, there is a difference.  If you dont believe me try something like
<html>
<body>
hello
</body>
world
</body>

it will return as
<HTML><HEAD></HEAD>
<BODY>hello world
 </BODY></HTML>

it is not the same as the actual source, it is what IE thinks the source *should* be.

 

by: egl1044Posted on 2009-11-04 at 08:53:37ID: 25741296

Hey Dentab,
The following gives me what I see in View Source from IE8. I don't know if there is a difference here using the IWebBrowser. Currently it will use the cache however it can be updated to resync the connection so it doesn't use the cache. Give it a shot.


Option Explicit
 
Private Const WININET_API_FLAG_SYNC = &H4&
Private Const INVALID_HANDLE_VALUE = (-1)
Private Const CREATE_ALWAYS = &H2&
Private Const GENERIC_WRITE = &H40000000
 
Private Declare Function CreateFileW Lib "kernel32" (ByVal lpFileName As Long, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function InternetOpenW Lib "wininet" (ByVal lpszAgent As Long, ByVal dwAccessType As Long, ByVal lpszProxyName As Long, ByVal lpszProxyBypass As Long, ByVal dwFlags As Long) As Long
Private Declare Function InternetOpenUrlW Lib "wininet" (ByVal hInternet As Long, ByVal lpszUrl As Long, ByVal lpszHeaders As Long, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal dwNumberOfBytesToRead As Long, lpdwNumberOfBytesRead As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInternet As Long) As Long
Private Declare Function InternetQueryDataAvailable Lib "wininet" (ByVal hFile As Long, lpdwNumberOfBytesAvailable As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
 
 
Public Sub ViewSource(ByVal szUrl As String, ByVal szFile As String)
  
  Dim Buffer() As Byte ' raw buffer.
  Dim hOpen As Long
  Dim hConn As Long
  Dim hFile As Long
  Dim dwBytes As Long
  Dim dwWrittenBytes As Long
  Dim dwReadBytes As Long
  
  ' Create and overwrite the file with write access.
  hFile = CreateFileW(StrPtr("\\?\" & szFile), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0)
  
  ' If this fails check rights and permissions...etc
  If hFile = INVALID_HANDLE_VALUE Then
    
    Debug.Print Err.LastDllError
    
    Exit Sub ' _leave
    
  End If
  
  ' Open connection force sync download.
  hOpen = InternetOpenW(0, 1, 0, 0, WININET_API_FLAG_SYNC)
  
  ' Establish connection to URL.
  hConn = InternetOpenUrlW(hOpen, StrPtr(szUrl), 0, 0, 0, 0)
  
  Do
  
    If InternetQueryDataAvailable(hConn, dwBytes, 0, 0) Then
    
      ' Allocate the amount that is immediatley available.
      ReDim Buffer(dwBytes) As Byte
 
    Else
    
      ' Allocate 1KB chunk if the amount available fails.
      dwBytes = 1024
      
      ReDim Buffer(dwBytes) As Byte
      
    End If
    
    If InternetReadFile(hConn, VarPtr(Buffer(0)), dwBytes, dwReadBytes) Then
      
      ' At this point we can write the bytes to the file.
      WriteFile hFile, VarPtr(Buffer(0)), dwReadBytes, dwWrittenBytes, 0
      
    Else
    
      Exit Do ' _leave
    
    End If
    
  Loop Until dwReadBytes = 0
  
  ' perform cleanup.
  InternetCloseHandle hConn
  InternetCloseHandle hOpen
  CloseHandle hFile
  
  ' free memory
  Erase Buffer
  
End Sub
 
Private Sub Command1_Click()
 
ViewSource "http://www.google.com/", "C:\source.txt"
 
End Sub

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:

Select allOpen in new window

 

by: dentabPosted on 2009-11-04 at 12:59:37ID: 25743860

I see... that may do, except I would need to replicate form posting too - which even if I did capture, would that not force a refresh?

 

by: dentabPosted on 2009-11-04 at 13:00:16ID: 25743868

I am considering writing a proxy... but that seems a little extreeme.

 

by: egl1044Posted on 2009-11-04 at 20:47:38ID: 25746850

I think I understand what you are trying to accomplish here. You are using webbrowser control to post data.
However if you don't need a webbrowser to display anything and you just want the RAW post contents you can send your RAW post to the URL instead this would only require one post that is your POST.

The API to accomplish this would be:
InternetOpenA
InternetConnectA
HttpOpenRequestA
HttpSendRequestA
InternetReadFile
InternetCloseHandle

This would be if you only wanted the RAW source of the POST. Can you post the link or a similiar link with your POST args?

 

by: dentabPosted on 2009-11-05 at 00:10:07ID: 25747516

Thanks... thats not quite it.

I have made an IDE for web-pages.  It has been in-use for some years, but the "Preview function" uses a web-browser control. Most of the pages made will use form-posting.
I have had-to override the context menu so "View Source" is not available.  I have written my own, but it means that it is (as detailed above) IEs version of the source, not the real thing.  Would some screen-shots clarify?

 

by: dentabPosted on 2009-11-05 at 00:10:41ID: 25747518

btw, I am out of office till Monday now - so I may not reply till then

 

by: dentabPosted on 2009-11-09 at 02:53:42ID: 25774785

The IDE has a "preview" window, which has additional debugging information.
The webbrowser control with it shows the actual page.  I added a view source a while back, but its using the outerHTML or innerHTML method.

also @FER_G:... outerHTML or innerHTML does not work the same with XHTML for some reason.

 

by: dentabPosted on 2009-11-09 at 02:56:02ID: 31651759

Not actually the solution for my needs, but did answer the question I posted.  Hopefully it will help somebody else though.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...