Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Сохранение страницы как MHT в IE9 (элемнты управления не изменяют свое значение)

Ответить
Настройки темы
Сохранение страницы как MHT в IE9 (элемнты управления не изменяют свое значение)

Пользователь


Сообщения: 78
Благодарности: 0

Профиль | Отправить PM | Цитировать


День добрый!

У меня есть программка, которая вызывает скрипт AutoIT и передает ему три параметра:
1. URL страницы,
2. Путь к рабочему каталогу, куда должны сохраняться страницы,
3. Имя файла под которым нужно сохранить страницу.

В результате скрипт сохранял нужную страницу в формате MHT в нужную папку с нужным именем.
Вот скрипт:

Код: Выделить весь код
#Include <GUIComboBox.au3>
#include <IE.au3>
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>

$sURL = $CmdLine[1]
$sWorkPaht = $CmdLine[2]
$sFileName = $CmdLine[3]

Opt("WinTitleMatchMode", 2)

$oIE = _IECreate ($sURL) ;, 0, 1, 1, 0) ; $sURL - первый параметр 'URL'

$win_handle = WinGetHandle("Windows Internet Explorer", $sURL)

_WinAPI_SetKeyboardLayout($win_handle, 0x0419)

;ControlSend ($win_handle, '', '', "{ALTDOWN}{ALTUP}фх", 0)
Send("{ALTDOWN}{ALTUP}")
Send("ф")
Send("х")

$sSaveAsWindow = "Сохранение веб-страницы"
WinWait($sSaveAsWindow,"")
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")
WinWaitActive($sSaveAsWindow,"")

ControlSetText ($sSaveAsWindow, "", "Edit1", $sWorkPaht) ; $sWorkPaht - второй параметр 'рабочая папка'
ControlClick ($sSaveAsWindow, "", "Button2")
_GUICtrlComboBox_SetCurSel(ControlGetHandle($sSaveAsWindow, '', 'ComboBox3'), 1)

;If FileExists($sWorkPaht & $sFileName) Then FileDelete($sWorkPaht & $sFileName)

ControlSetText ($sSaveAsWindow, "", "Edit1", $sFileName) ; "test" - третий параметр 'имя файла'
ControlClick ($sSaveAsWindow, "", "Button2")

$Timer = TimerInit()
While TimerDiff($Timer) < 50000000
    $hFile = _WinAPI_CreateFile($sWorkPaht & $sFileName, 2, 2, 0)
    If $hFile Then
        _WinAPI_CloseHandle($hFile)
        ExitLoop
    EndIf
    Sleep(1000)
WEnd

If Not $hFile Then
    ; Ошибка
    ConsoleWrite('File not found or time out.' & @CR)
Else
    ConsoleWrite('OK' & @CR)
EndIf

;Sleep(15000)


WinClose($win_handle)
Все это работало, пока исполнялось в Windows XP и IE8...

Теперь после перехода на Windows 7 появились проблемы.
С тем, что поменялись номера инстансов элементов управления в окне сохранения я разобрался.
Привел скрипт к нужному виду, но он все равно не работает.

Код: Выделить весь код
#Include <GUIComboBox.au3>
#include <IE.au3>
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>

$sURL = $CmdLine[1]
$sWorkPaht = $CmdLine[2]
$sFileName = $CmdLine[3]

Opt("WinTitleMatchMode", 2)

$oIE = _IECreate ($sURL) ;, 0, 1, 1, 0) ; $sURL - первый параметр 'URL'

$win_handle = WinGetHandle("Windows Internet Explorer", $sURL)

_WinAPI_SetKeyboardLayout($win_handle, 0x0419)

;ControlSend ($win_handle, '', '', "{ALTDOWN}{ALTUP}фх", 0)
Send("{ALTDOWN}{ALTUP}")
Send("ф")
Send("с")

$sSaveAsWindow = "Сохранение веб-страницы"
WinWait($sSaveAsWindow,"")
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")
WinWaitActive($sSaveAsWindow,"")

; здесь переход в рабочую папку
ControlSetText ($sSaveAsWindow, "", "Edit1", $sWorkPaht, 1) ; $sWorkPaht - второй параметр 'рабочая папка'
ControlClick ($sSaveAsWindow, "", "Button1")

; выбор формата сохранения - MHT
_GUICtrlComboBox_SetCurSel(ControlGetHandle($sSaveAsWindow, '', 'ComboBox2'), 1)

;If FileExists($sWorkPaht & $sFileName) Then FileDelete($sWorkPaht & $sFileName)
ControlSetText ($sSaveAsWindow, "", "Edit1", $sFileName) ; "test" - третий параметр 'имя файла'
ControlClick ($sSaveAsWindow, "", "Button1")

$Timer = TimerInit()
While TimerDiff($Timer) < 50000000
    $hFile = _WinAPI_CreateFile($sWorkPaht & $sFileName, 2, 2, 0)
    If $hFile Then
        _WinAPI_CloseHandle($hFile)
        ExitLoop
    EndIf
    Sleep(1000)
WEnd

If Not $hFile Then
    ; Ошибка
    ConsoleWrite('File not found or time out.' & @CR)
Else
    ConsoleWrite('OK' & @CR)
EndIf

;Sleep(15000)


WinClose($win_handle)
Проблема вот в чем:
в куске кода, помечнном комментом "; здесь переход в рабочую папку" -
я подставлял в TextBox "Имя файла" - путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить (ранее в IE8) открывалась нужнаяя папка.
Теперь, я подставляю в TextBox "Имя файла" - тоже путь к рабочей папке со слешем в конце, и при нажатии на кнопку сохранить происходит не переход, а сохранение файла с именем, которое предлагалось по умолчанию в момент открытия диалогового окна (тот текст что в шапке - имя страницы)...

p.s. Да, кстати, при выборе в ComboBox-е варианта "Веб-архив, один файл (*.mht)", зрительно он выбирается, НО сохраняется файл все равно в формате "Веб-страница полностью" с дополнительной папкой.
Короче говоря все зрительно меняется, но "в глубине элементов управления" остается то, что предлагало окно "Сохранить как..."
А еще не завершается скрипт...

Господа ГУРУ, помогите! Пожалуйста!

Отправлено: 19:45, 26-11-2011

 

Пользователь


Сообщения: 78
Благодарности: 0

Профиль | Отправить PM | Цитировать


Неужто для Windows 7 никто скриптов не писал?

Отправлено: 10:23, 28-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 67
Благодарности: 13

Профиль | Отправить PM | Цитировать


Столкнулся с похожей ситуацией. Помогает СontrolSend в Edit-объект, в причинах разбираться не стал, на этом этапе моя проблема была решена...

-------
Информация для размышления
Такому в вузах не научат


Отправлено: 01:35, 29-11-2011 | #3


Пользователь


Сообщения: 78
Благодарности: 0

Профиль | Отправить PM | Цитировать


После некоторого редактирования скрипта

Код: Выделить весь код
#Include <GUIComboBox.au3>
#Include <GUIComboBoxEx.au3>
#include <IE.au3>
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>

$sURL = $CmdLine[1]
$sWorkPaht = $CmdLine[2]
$sFileName = $CmdLine[3]
$sSaveAsWindow = "Сохранение веб-страницы"

Opt("WinTitleMatchMode", 2)

If FileExists($sWorkPaht & $sFileName) Then FileDelete($sWorkPaht & $sFileName)

$oIE = _IECreate ($sURL) ;, 0, 1, 1, 0) ; $sURL - первый параметр 'URL'

$win_handle = WinGetHandle("Windows Internet Explorer", $sURL)

_WinAPI_SetKeyboardLayout($win_handle, 0x0419)

Do
	Send("{ALTDOWN}{ALTUP}")
	sleep(500)
	Send("ф")
	sleep(500)
	Send("с")
	sleep(500)
Until WinExists($sSaveAsWindow, "")

WinWait($sSaveAsWindow,"")
If Not WinActive($sSaveAsWindow,"") Then WinActivate($sSaveAsWindow,"")
WinWaitActive($sSaveAsWindow,"")
sleep(500)

; здесь мы переходим в папку в которую должны сохраняться страницы
ControlSetText ($sSaveAsWindow, "", "Edit1", $sWorkPaht) ; $sWorkPaht - второй параметр 'рабочая папка'
_GUICtrlComboBoxEx_SetCurSel(ControlGetHandle($sSaveAsWindow, "", "ComboBox2"), 1)
ControlClick ($sSaveAsWindow, "", "Button1")

; здесь сохраняем MHT файл с нужным именем
ControlSetText ($sSaveAsWindow, "", "Edit1", $sFileName, 1) ; "test" - третий параметр 'имя файла'
_GUICtrlComboBoxEx_SetCurSel(ControlGetHandle($sSaveAsWindow, "", "ComboBox2"), 1)
ControlClick ($sSaveAsWindow, "", "Button1")

sleep(500)

$Timer = TimerInit()
While TimerDiff($Timer) < 2000000000
    $hFile = _WinAPI_CreateFile($sWorkPaht & $sFileName, 2, 2, 0)
    If $hFile Then
        _WinAPI_CloseHandle($hFile)
        ExitLoop
    EndIf
    Sleep(1000)
WEnd

Sleep(1000)

If Not $hFile Then
    ; Ошибка
    ConsoleWrite('File not found or time out.' & @CR)
Else
    ConsoleWrite('OK' & @CR)
EndIf

WinClose($win_handle)

Exit($win_handle)
он стал сохранять файл с нужным именем, но всё также несмотря на то, что он выбирает в ComboBox "Тип файла" второй пункт "Веб-архив, один файл (*.mht)" (при этом на экране видны изменения!), а при эмуляции нажатия на кнопку "Сохранить" файл сохраняется как HTML (с файлами в отдельной папке) (это превый пункт в ComboBox-е, т.е. по-умолчанию).

Как заставить скрипт сохрянять файл в формате MHT?

Господа помогите пожалуйста, уже столько времени ничего не получается

Отправлено: 15:09, 11-12-2011 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


avmir, такое пробовали?

Update: ага, вижу: пробовали. Проблема в том, что библиотека CDO некорректно оформляет путь на css, оформленный ссылкой — JScript: Пример сохранения web-страницы в TXT, HTML и MHT (веб-архив):
Цитата:
Одна тонкость - MHT формируется библиотекой CDO с ошибкой - когда в веб-архив внедрен внешний CSS файл (<link rel="stylesheet" type="text/css" href="file.css" />), то ссылку на него библиотека указывает неверно, вследствие чего страница из mht отображается без стиля из этого файла. Если же css-таблица вписана в сам html-исходник с помощью тега <style>, то тогда все отображается верно.

Последний раз редактировалось Iska, 11-12-2011 в 15:59.


Отправлено: 15:48, 11-12-2011 | #5


Пользователь


Сообщения: 78
Благодарности: 0

Профиль | Отправить PM | Цитировать


Кроме того, IE8 или 9 длительно ждет пока не загрузятся все картинки со страницы, и только по прошествии какого-то времени "разрешает" сохранить страницу.
А CDO судя по всему не заморачивается с этим. "Картинка сейчас недоступна?" - "Ну и фиг с ней".

Мне нужно-то только как-то "зафиксировать" выбранный в ComboBox-е элемент...

Отправлено: 02:51, 12-12-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


avmir, так и в IE было — чересчур малый таймаут. Возможно, как Вы говорите, в свежих версиях IE сие поправили.

Отправлено: 03:54, 12-12-2011 | #7


Пользователь


Сообщения: 78
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нет. В восьмерке всё работало на УРА...

Может кликами можно как-то сделать? Пробовал, во время исполнения скрипта, кликами повторить выбор пунката "Веб-архив, один файл (*.mht)" - всё сохранилось правильно.
Да и еще мысль - в IE всегда этот выбор запоминался. Я так думаю, в момент выбора элемента данные заносились в реестр. Может при сохранении IE берет "тип файла" не из ComboBox-а, а как раз из реестра? Может, весь этот гемор связан как раз с параноидальностью "семерки"?

Отправлено: 08:59, 12-12-2011 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата avmir:
Нет. В восьмерке всё работало на УРА... »
Я, говоря про «свежие версии IE», как раз и имел в виду версии после шестой.

Отправлено: 17:55, 12-12-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Сохранение страницы как MHT в IE9 (элемнты управления не изменяют свое значение)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
Google Chrome научится сохранять страницы в .mht формате OSZone News Новости информационных технологий 2 07-07-2011 22:34
Internet Explorer 6 - Сохранение страниц в MHT по умолчанию CTEPBA Microsoft Windows 2000/XP 24 12-07-2006 10:50
Что поменялось в ОПК, почему страницы - html, и почему нельзя удалять свое сообщение? Arrest О сайте и форуме 9 04-05-2006 22:22
запретить сохранение страницы. ?? Dafi Вебмастеру 48 12-02-2005 23:47




 
Переход