Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Сохранение загруженной html-страницы (http://forum.oszone.net/showthread.php?t=140712)

Sestrichka 21-05-2009 14:01 1123926

Сохранение загруженной html-страницы
 
Привет всем!
Мне надо сохранить загруженную html-страницу в файл.
Пишу так:
Код:

#include <IE.au3> 
#include <file.au3>
$oIE_2 = _IECreate ("http://vkontakte.ru/index.php")
_IELoadWait ($oIE_2) 
$R=1
$Rezalt_name = "Rezalt"&$R
MsgBox(0,"",$Rezalt_name)
$Path = "E:\" $var = FileSaveDialog( "Choose a name.", $Path, "(*.html)", 2)
Send("{"&$Rezalt_name&"}")
Sleep(3000)
Send("{ENTER}")
Sleep(5000)
_IEQuit ($oIE_2)

Но очевидно не срабатывает Send("{"&$Rezalt_name&"}"), хотя фокус находится на поле ввода имени.
Пробовала и Send($Rezalt_name), и Send("$Rezalt_name") - не получается ничего ввести :crazygirl:
Как в стандартном окне сохранения файла ввести имя файла из переменной $Rezalt_name ?и нажать кнопку "Сохранить"?

Creat0R 21-05-2009 14:18 1123949

Цитата:

Цитата Sestrichka
Пишу так »

Для начала заглините в справку, посмотрите синтаксис кода... «$Path = "E:\" $var = FileSaveDialog» это у вас ошибки не вызывает?

И к тому же FileSaveDialog возвращает полный путь к указанному файлу:

Код:

#include <Inet.au3>

$sSource = _INetGetSource("http://vkontakte.ru/index.php")

$R = 1
$Rezalt_name = "Rezalt" & $R

;MsgBox(0,"",$Rezalt_name)

$sPath = FileSaveDialog("Choose a name.", "", "(*.html)", 2 + 16, $Rezalt_name)
If @error Then Exit

If
StringRight($sPath, 4) <> "html" Then $sPath &= ".html"

$hFileOpen = FileOpen($sPath, 2)
FileWrite($hFileOpen, $sSource)
FileClose($hFileOpen)

А если нужно тихо без диалога, то строчка с FileSaveDialog вовсе не нужна, а переменной $sPath присвоить значение от $Rezalt_name.

Sestrichka 21-05-2009 15:31 1124014

на счет
Цитата:

Цитата Creat0R
«$Path = "E:\" $var = FileSaveDialog» это у вас ошибки не вызывает? »

Это у меня опечатка, в коде все в норме - все обзацы на месте.
Мне действительно без диалога вариант больше подходит, но и тот, и другой , к сожалению, в результате создали пустой файл (хотя и с нужным именем,и в нужной директории).
Можно ли иначе как-то сохранять фаилы? Особенно меня интересует, как сохранить html-страницу с картинками, чтоб ничего со страницы "не потерялось"?

Creat0R 21-05-2009 15:50 1124035

Цитата:

Цитата Sestrichka
Мне действительно без диалога вариант больше подходит »

Код:

#include <Inet.au3>

$sSource = _INetGetSource("http://vkontakte.ru/index.php")

$R = 1
$sPath = @ScriptDir & "\Rezalt" & $R
If StringRight($sPath, 4) <> "html" Then $sPath &= ".html"

$hFileOpen = FileOpen($sPath, 2)
FileWrite($hFileOpen, $sSource)
FileClose($hFileOpen)

Цитата:

Цитата Sestrichka
как сохранить html-страницу с картинками, чтоб ничего со страницы "не потерялось"? »

Чтобы оно всё локально сохранилось? Это не так уж и просто, нужно будет парсить Html-код страницы и закачивать отдельно файлы.

Iska 22-05-2009 01:05 1124597

Sestrichka, если требуется именно содержимое, как таковое, а не отдельные файлы (при использовании описанной ниже методики имена отдельных файлов теряются), то можно получать содержимое страницы и связанных файлов в виде .mht («Веб-архив» в терминологии Microsoft), используя библиотеку Collaboration Data Objects:
читать дальше »
Как правило, эта библиотека уже установлена, если у Вас установлен Microsoft Office 2000/XP/2003; если у Вас установлен Microsoft Office 2007 или вообще не установлен — то надо пройти по вышеуказанной ссылке, загрузить и установить эту библиотеку.

Код:

AutoItSetOption("MustDeclareVars", 1)

Local Const $cdoSuppressNone        =  0 ; Загружать все
Local Const $cdoSuppressImages      =  1 ; Не загружать картинки
Local Const $cdoSuppressBGSounds    =  2 ; Не загружать фоновые звуки
Local Const $cdoSuppressFrames      =  4 ; Не загружать фреймы
Local Const $cdoSuppressObjects    =  8 ; Не загружать объекты
Local Const $cdoSuppressStyleSheets = 16 ; Не загружать таблицы стилей
Local Const $cdoSuppressAll        = 31 ; Не загружать ничего из вышеперечисленного

Local Const $adSaveCreateNotExist  =  1
Local Const $adSaveCreateOverWrite  =  2


Local $objIMessage                  = ObjCreate("CDO.Message")
Local $objIConfiguration            = ObjCreate("CDO.Configuration")

Local $strURL                      = "http://www.yandex.ru"
Local $strUserName                  = ""
Local $strPassword                  = ""


$objIMessage.Configuration = $objIConfiguration
$objIMessage.CreateMHTMLBody($strURL, $cdoSuppressNone, $strUserName, $strPassword)

; Сохранить страницу как веб-архив .MHT
With $objIMessage.BodyPart.GetStream()
        .SaveToFile("c:\Page.mht", $adSaveCreateOverWrite)
        .Close()
EndWith

$objIConfiguration                  = 0
$objIMessage                        = 0

Exit(0)

Источник: Серый форум / JScript: Пример сохранения web-страницы в TXT, HTML и MHT (веб-архив).

Sestrichka 27-05-2009 18:23 1128863

Спасибо большое за помощь, нашла более допотопненький вариант:
использую гарячии клавиши браузера.
Код:

Send("!Фк");сохранить файл
Send("!х")
Sleep(1000)
Send("!ФЗ");закрыть файл

Единственное слабое место этого варианта - надо ставить задержки между командами, т.к. возможна ситуация, когда окошко еще не появилось, а скрипт уже шлет команду окну, которого по сути еще нет.

Creat0R 27-05-2009 20:20 1128940

Цитата:

Цитата Sestrichka
возможна ситуация, когда окошко еще не появилось, а скрипт уже шлет команду окну, которого по сути еще нет »

Для этого есть WinWait которое будет ждать появление нужно окна.

adima 11-11-2009 20:55 1267853

Возникла проблема при сохранении содержимого интернет окна с помощью скрипта от Iska (см.три поста выше) сохраняет в .txt иероглифы (на некоторых сайтах). Как туда прикрутить CHARSET, чтобы страницы сохранялись в различных раскладках

Iska 12-11-2009 03:26 1268083

adima, приведите примеры таких сайтов (конкретно — адреса страниц).

adima 12-11-2009 09:01 1268180

http://russianpost.ru

Iska 12-11-2009 11:55 1268281

И что там не так :)? У меня нормально отображается.

Теперь по существу: крупные специалисты по разработке сайтов никогда не указывают кодировку страниц, зачем нам стандарты — пусть браузер сам гадает, что там за кодировка. Соответственно, нет в документе — не будет и в сформированном файле. И если IE иногда умудряется распознать кодировку страницы «с потолка» по содержимому, то Opera в данном случае честно следует стандартам (и установленным настройкам приложения — проверьте, что стоит у Вас для «Koдиpoвкa для дoкумeнтoв c oтcутcтвиeм cпeцификaции»). В данном случае, сие поправимо: укажите ручками правильную кодировку в соответствующем приложении при просмотре сформированного mht-файла.

Хотя, конечно, правильнее будет — бить тяжёлым тупым предметом подобных разработчиков. Если я не прав — пусть более опытные товарищи меня поправят.

adima 12-11-2009 16:00 1268467

Цитата:

Цитата Iska
И что там не так ? У меня нормально отображается. »

Не внимательно прочитали мой пост я сохраняю в TXT с помощью
...
;Сохранить страницу как .TXT
With $objIMessage.TextBodyPart.GetEncodedContentStream()
.SaveToFile(@ScriptDir & "\1.txt", $adSaveCreateOverWrite)
.Close()
EndWith
...

В TXT что-то типа
я╗┐╬╥╤╦┼╞╚┬└═╚┼ ╨┼├╚╤╥╨╚╨╙┼╠█╒ ╧╬╫╥╬┬█╒ ╬╥╧╨└┬╦┼═╚╔

┬эєЄЁшЁюёёшщёъшщ яюўЄют√щ шфхэЄшЇ

Iska 12-11-2009 18:50 1268613

Цитата:

Цитата adima
Не внимательно прочитали мой пост я сохраняю в TXT…»

Внимательно. Чтобы не возникало подобного рода коллизий, сразу приводите Ваш код.
Цитата:

Цитата adima
В TXT что-то типа…»

И опять-таки всё верно. В оригинале был UTF-8, на выходе в текстовом файле — тот же UTF-8. Работает, как и заявлено.

Если Вы хотите другой формат — можно попробовать конвертировать через промежуточный поток, наподобие:
Код:

AutoItSetOption("MustDeclareVars", 1)

Local Const $cdoSuppressNone        =  0 ; Загружать все
Local Const $cdoSuppressImages      =  1 ; Не загружать картинки
Local Const $cdoSuppressBGSounds    =  2 ; Не загружать фоновые звуки
Local Const $cdoSuppressFrames      =  4 ; Не загружать фреймы
Local Const $cdoSuppressObjects    =  8 ; Не загружать объекты
Local Const $cdoSuppressStyleSheets = 16 ; Не загружать таблицы стилей
Local Const $cdoSuppressAll        = 31 ; Не загружать ничего из вышеперечисленного

Local Const $adSaveCreateNotExist  =  1
Local Const $adSaveCreateOverWrite  =  2

Local Const $adTypeBinary          =  1
Local Const $adTypeText            =  2



Local $objIMessage                  = ObjCreate("CDO.Message")
Local $objIConfiguration            = ObjCreate("CDO.Configuration")
Local $objStream                    = ObjCreate("ADODB.Stream")

Local $strURL                      = "http://russianpost.ru"
Local $strUserName                  = ""
Local $strPassword                  = ""


$objIMessage.Configuration = $objIConfiguration
$objIMessage.CreateMHTMLBody($strURL, $cdoSuppressAll, $strUserName, $strPassword)

With $objStream
        .Open

        .Type    = $adTypeText
        .Charset = "windows-1251"

        .WriteText($objIMessage.TextBodyPart.GetEncodedContentStream().ReadText())

        .SaveToFile("c:\Page.txt", $adSaveCreateOverWrite)

        .Close()
EndWith

$objStream                          = 0
$objIConfiguration                  = 0
$objIMessage                        = 0

Exit(0)



Время: 15:26.

Время: 15:26.
© OSzone.net 2001-