Jump to content
Sign in to follow this  

How to get full control over the SaveAs dialog in IE8

Recommended Posts

Got up this task:

There is a list of URL, I want to save the corresponding page URL-s as a Web Archive (MHT).

Since a web page using CDO remains incomplete (instead of images and styles - links), it was decided to use for these purposes AutoIt and IE8.

When you save through IE, the Web archive is fully preserved.

For example:

1. I can submit the URL as a parameter to the script for AutoIt.

2. This script opens a URL in a hidden window IE

3. The script maintains a Web archive

4. The script closes the window (or returns an HWND for reuse)

Show you how you can using the script in the dialog box "Save as ...":

1. Set the path to the default folder (say, this path can be passed to the script as the second parameter)

2. Select the file type combo box in the dialog box.

And most importantly - how all this can be done in a hidden window?

#include <IE.au3>
#Include <WinAPIEx.au3>

Opt("WinTitleMatchMode", 2)

_IECreate ("http://www.some.some", 0, 1, 1, 1)

$win_handle = WinGetHandle("Windows Internet Explorer", "http://www.some.some")


$sSaveAsWindow = "Save Webpage"
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")

ControlSetText ($sSaveAsWindow, "", "Edit1", "test")

ControlClick ($sSaveAsWindow, "", "Button2")

P.S. Sorry for bad English and bad AutoIt. In both languages, I'm new...

Share this post

Link to post
Share on other sites

There are optional switches determining what's saved with CreateMHTMLBody method.

Before you continue your IE automation run this script and see if images are saved now. msdn says they should be.

; COM error handler
Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
Func _ErrFunc()
    Return 0x4F66 & 0x546865 & 0x4D6163 ; pay no attention to this. It's a joke.

Global $sURL = "http:\\www.google.com"

;'Convert' to MHT:
Global $sMHT = _MHT($sURL)
If @error Then ConsoleWrite("!Function failed. Error number is: " & @error & @CRLF)
ConsoleWrite($sMHT & @CRLF)

; Save to disk:
Global $hFile = FileOpen(@ScriptDir & "\ThatPage.mht", 2)
FileWrite($hFile, $sMHT)

Func _MHT($sURL)
    Local $oCDO = ObjCreate("CDO.Message")
    If @error Then Return SetError(1, 0, "") ; Couldn't create CDO.Message object
    If $oError.Number Then Return SetError(2, 0, "") ; Check sURL you're passing. Is it ok?
    Local $oStream = $oCDO.GetStream
    If IsObj($oStream) Then
        Return $oStream.ReadText
    Return SetError(3, 0, "") ; GetStream method failed




Share this post

Link to post
Share on other sites

trancexx thank you very much for your attention to my question. :)

Try to run this script to a page with pictures, and then disconnect from the Internet and try to open the file... :idea:

Share this post

Link to post
Share on other sites

You could do this in the background without automated clicking or hidden windows with something like this:

_INetGetMHT( "http://docs.phplivesupport.com/viewarticle.php?aid=76&pid=6&uid=1", @DesktopDir & "\IISandPHPonWin2K.MHT" )
Func _INetGetMHT( $url, $file )
    Local $msg = ObjCreate("CDO.Message")
    If @error Then Return False
    Local $ado = ObjCreate("ADODB.Stream")
    If @error Then Return False

    With $ado
        .Type = 2
        .Charset = "US-ASCII"
    $msg.CreateMHTMLBody($url, 0)
    $msg.DataSource.SaveToObject($ado, "_Stream")
    $ado.SaveToFile($file, 1)
    $msg = ""
    $ado = ""
    Return True

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Create New...