|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Сохранение страницы как MHT в IE9 (элемнты управления не изменяют свое значение) |
|
Сохранение страницы как MHT в IE9 (элемнты управления не изменяют свое значение)
|
Пользователь Сообщения: 78 |
День добрый!
У меня есть программка, которая вызывает скрипт 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 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
|
Профиль | Отправить PM | Цитировать Неужто для Windows 7 никто скриптов не писал?
|
Отправлено: 10:23, 28-11-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 67
|
Профиль | Отправить PM | Цитировать Столкнулся с похожей ситуацией. Помогает СontrolSend в Edit-объект, в причинах разбираться не стал, на этом этапе моя проблема была решена...
|
------- Отправлено: 01:35, 29-11-2011 | #3 |
Пользователь Сообщения: 78
|
Профиль | Отправить 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) Как заставить скрипт сохрянять файл в формате MHT? Господа помогите пожалуйста, уже столько времени ничего не получается ![]() |
Отправлено: 15:09, 11-12-2011 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Update: ага, вижу: пробовали. Проблема в том, что библиотека CDO некорректно оформляет путь на css, оформленный ссылкой — JScript: Пример сохранения web-страницы в TXT, HTML и MHT (веб-архив): Цитата:
|
||
Последний раз редактировалось Iska, 11-12-2011 в 15:59. Отправлено: 15:48, 11-12-2011 | #5 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Кроме того, IE8 или 9 длительно ждет пока не загрузятся все картинки со страницы, и только по прошествии какого-то времени "разрешает" сохранить страницу.
А CDO судя по всему не заморачивается с этим. "Картинка сейчас недоступна?" - "Ну и фиг с ней". Мне нужно-то только как-то "зафиксировать" выбранный в ComboBox-е элемент... |
Отправлено: 02:51, 12-12-2011 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать avmir, так и в IE было — чересчур малый таймаут. Возможно, как Вы говорите, в свежих версиях IE сие поправили.
|
Отправлено: 03:54, 12-12-2011 | #7 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Нет. В восьмерке всё работало на УРА...
Может кликами можно как-то сделать? Пробовал, во время исполнения скрипта, кликами повторить выбор пунката "Веб-архив, один файл (*.mht)" - всё сохранилось правильно. Да и еще мысль - в IE всегда этот выбор запоминался. Я так думаю, в момент выбора элемента данные заносились в реестр. Может при сохранении IE берет "тип файла" не из ComboBox-а, а как раз из реестра? Может, весь этот гемор связан как раз с параноидальностью "семерки"? |
Отправлено: 08:59, 12-12-2011 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата avmir:
|
|
Отправлено: 17:55, 12-12-2011 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|