Показать полную графическую версию : [решено] Сохранение загруженной html-страницы
Sestrichka
21-05-2009, 14:01
Привет всем!
Мне надо сохранить загруженную 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 ?и нажать кнопку "Сохранить"?
Пишу так »
Для начала заглините в справку, посмотрите синтаксис кода... «$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
на счет
«$Path = "E:\" $var = FileSaveDialog» это у вас ошибки не вызывает? »
Это у меня опечатка, в коде все в норме - все обзацы на месте.
Мне действительно без диалога вариант больше подходит, но и тот, и другой , к сожалению, в результате создали пустой файл (хотя и с нужным именем,и в нужной директории).
Можно ли иначе как-то сохранять фаилы? Особенно меня интересует, как сохранить html-страницу с картинками, чтоб ничего со страницы "не потерялось"?
Мне действительно без диалога вариант больше подходит »
#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)
как сохранить html-страницу с картинками, чтоб ничего со страницы "не потерялось"? »
Чтобы оно всё локально сохранилось? Это не так уж и просто, нужно будет парсить Html-код страницы и закачивать отдельно файлы.
Sestrichka, если требуется именно содержимое, как таковое, а не отдельные файлы (при использовании описанной ниже методики имена отдельных файлов теряются), то можно получать содержимое страницы и связанных файлов в виде .mht («Веб-архив» в терминологии Microsoft), используя библиотеку Collaboration Data Objects (http://www.microsoft.com/downloads/details.aspx?FamilyID=2714320d-c997-4de1-986f-24f081725d36&DisplayLang=en): Как правило, эта библиотека уже установлена, если у Вас установлен 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 (веб-архив) (http://forum.script-coding.info/viewtopic.php?pid=6245#p6245).
Sestrichka
27-05-2009, 18:23
Спасибо большое за помощь, нашла более допотопненький вариант:
использую гарячии клавиши браузера.
Send("!Фк");сохранить файл
Send("!х")
Sleep(1000)
Send("!ФЗ");закрыть файл
Единственное слабое место этого варианта - надо ставить задержки между командами, т.к. возможна ситуация, когда окошко еще не появилось, а скрипт уже шлет команду окну, которого по сути еще нет.
возможна ситуация, когда окошко еще не появилось, а скрипт уже шлет команду окну, которого по сути еще нет »
Для этого есть WinWait которое будет ждать появление нужно окна.
Возникла проблема при сохранении содержимого интернет окна с помощью скрипта от Iska (см.три поста выше) сохраняет в .txt иероглифы (на некоторых сайтах). Как туда прикрутить CHARSET, чтобы страницы сохранялись в различных раскладках
adima, приведите примеры таких сайтов (конкретно — адреса страниц).
И что там не так :)? У меня нормально отображается.
Теперь по существу: крупные специалисты по разработке сайтов никогда не указывают кодировку страниц, зачем нам стандарты — пусть браузер сам гадает, что там за кодировка. Соответственно, нет в документе — не будет и в сформированном файле. И если IE иногда умудряется распознать кодировку страницы «с потолка» по содержимому, то Opera в данном случае честно следует стандартам (и установленным настройкам приложения — проверьте, что стоит у Вас для «Koдиpoвкa для дoкумeнтoв c oтcутcтвиeм cпeцификaции»). В данном случае, сие поправимо: укажите ручками правильную кодировку в соответствующем приложении при просмотре сформированного mht-файла.
Хотя, конечно, правильнее будет — бить тяжёлым тупым предметом подобных разработчиков. Если я не прав — пусть более опытные товарищи меня поправят.
И что там не так ? У меня нормально отображается. »
Не внимательно прочитали мой пост я сохраняю в TXT с помощью
...
;Сохранить страницу как .TXT
With $objIMessage.TextBodyPart.GetEncodedContentStream()
.SaveToFile(@ScriptDir & "\1.txt", $adSaveCreateOverWrite)
.Close()
EndWith
...
В TXT что-то типа
я╗┐╬╥╤╦┼╞╚┬└═╚┼ ╨┼├╚╤╥╨╚╨╙┼╠█╒ ╧╬╫╥╬┬█╒ ╬╥╧╨└┬╦┼═╚╔
┬эєЄЁшЁюёёшщёъшщ яюўЄют√щ шфхэЄшЇ
Не внимательно прочитали мой пост я сохраняю в TXT…»
Внимательно. Чтобы не возникало подобного рода коллизий, сразу приводите Ваш код.
В 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)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.