![]() |
Модераторы: MetalFan |
![]() ![]() ![]() |
|
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Использую IWebBrowser2 для отправки запросов на сайт. На сайтах активно используется JavaScript, поэтому проще было использовать WebBrowser, а не Indy, Synapse. Ищем на форму на странице, заполняем все параметры и нажимаем кнопку методом Click.
Все обрабатывается без прямого участия пользователя, то есть окно WebBrowser не отображается, работает все в DLL. Проблема в том, что на некоторых сайтах выводятся различные сообщения, например, "Ваше сообщение успешно добавлено!" и тому подобные. Установка свойства silent не помогает. Как запретить вывод таких (да и любых других) сообщений? |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Если никак не удается отключить сообщения - то можно воспользоваться вставкой скрипта с подменой функций.
Например вставка в страницу следующего кода избавит от alertа
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Интересно. То есть на лету, при загрузке, меняем страницу. А так как POST-запрос будет идти уже с этой измененной страницы, то вставленный JavaScript-код будет срабатывать и блокировать все сообщения, генерируемые другими JavaScript?
|
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Не получается сделать вставку скрипта. Испробовал несколько вариантов - ни один не сработал.
Функция загружает страницу и возвращает ее исходник. В чем может быть проблема? |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 3 Всего: 128 |
И в чем же простота? как из пушки по воробьям. Все, что делается через WB можно сделать(проэмулировать) и через HTTP-клиента. инфа 100%. -------------------- There are always someone smarter than you... |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Можно-то можно, но далеко не всегда это удобно. В данном случае при отправлении POST-запроса посредством JavaScript генерируются некоторые нефиксированные параметры. Переносить эти алгоритмы в свою программу? Но где гарантия, что на другом сайте не будут добавлены еще какие-то JavaScript? Пусть и рассматривается одна CMS, но иногда их кастомизируют. Поэтому для меня удобнее было воспользоваться WebBrowser. Да и в целом тогда код получается лаконичнее (в мое случае). Хотя не спорю, работать с Synapse, Indy гораздо приятнее. Вокруг WebBrowser целый ореол всего-всего и лично я не вижу особой логики: например, чем отличаются IWebBrowser от IWebBrowser2, или, к примеру, Navigate от Navigate2 плюс куча других интерфейсов. Из-за этого одну и ту же задачу можно решать сотней способов, но работать будет один ![]() ![]() |
|||
|
||||
Чучмек |
|
||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Используй лучше TWebBrowser.
Сейчас проверил D7/WinXPsp3/IE6 Вставка скрипта
Работает, но только, если, скрипт вставляется после того, как в окне IE разрешается "отображение активного содержимого".
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Вот сейчас проверил на XE2/Win7
работает -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Спасибо, Чучмек, работает. Только в тексте исходников, который возвращает моя функция GetWB, нет скрипта. Но это не важно, главное конечный результат достигается (просто сначала подумал, что способ не работает).
Чучмек, а можно отключить музыку на сайте? Это менее критично, чем сообщения, но тоже неприятно, когда из программы начинают раздаваться посторонние звуки. |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Интересует конкретный сайт или вообще для всех?
Для конкретного - можно. Нужно смотреть html код, и искать чем и как выполняется проигрывание. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
В идеале, конечно для всех
![]() Но скорее всего это просто исключение, и нет смысла из-за одного сайта что-то делать. Но с другой стороны, я посмотрел и, насколько понял, звук воспроизводится через флеш. Для дополнительной проверки воспроизвел на браузере без флеша - никакого звука не было. Поэтому было бы полезно отключить воспроизведение флеша, не подскажете как? Для примера, ссылка http://www.alphagm.ru/news.html/predlagaem...dke?forum_ext=1 И еще вопрос. В примере со вставкой скрипта вы привели полный код - включая создание IWebBrowser2. У меня сделано совсем по-другому:
Это часть кода библиотеки. Приложение работает в многопоточном режиме, и каждый поток вызывает одну из функций библиотеки. Все работает нормально, за одним исключением. Когда все потоки отработали, я заново их запускаю, но возникает ошибка на этапе создания класса окна(wHandle := CreateWindowEx) - wHandle равен нулю, возвращает ошибку "Класс уже существует". Здесь непонятны два момента: 1. Ведь потоки потоки работают, то есть у нас создаются эти оконные классы раз за разом (точнее поток за потоком ![]() 2. И опять же, все что создается - освобождается: и wb, и wHandle. Так как, код, связанный с WebBrowser - не мой, вполне возможно, я что-то упустил. А если создавать IWebBrowser2 как у вас в примере, то видно, что появляются процессы IE (в моем способе их нет) и они остаются даже после закрытия программы (wb := nil не помогает). Да и как мне показалось, потоки стали очень медленно работать, как в однопоточном режиме. Поэтому первый способ мне кажется предпочтительнее, осталось только разобраться с этой ошибкой ![]() |
|||
|
||||
Чучмек |
|
||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Я пока особо не вчитывался, но... Регистрация класса происходит при создании каждого потока?
По-моему RegisterClassEx нужно вызывать только один раз. Добавлено через 11 минут и 52 секунды
iwebbrowser2 в данном случае "ручка" к окну IE, который выполняется в своем процессе.
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 3 Всего: 128 |
Пробежаться по DOM структуре и "грохнуть" все <embed> и <object> Это сообщение отредактировал(а) MetalFan - 7.6.2012, 17:50 -------------------- There are always someone smarter than you... |
|||
|
||||
M1ndAction |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
А как это сделать? ![]() Что касается ошибки "Класс уже существует": нашел решение. Модифицируем код
на
Самое смешное, что это решение первым пришло мне в голову, ведь это так логично: если натыкаемся на "уже зарегистрированный" класс, то очевидно, что его нужно "разрегистрировать", то бишь UnregisterClass. Но в справке я нашел лишь procedure UnRegisterClass(AClass: TPersistentClass);, и начались длительные поиски. Как я смотрел - непонятно ![]() А решение, кстати, нашел здесь же, на форуме http://forum.vingrad.ru/forum/topic-313129...terclassex.html |
||||
|
|||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Зачем регистрировать класс при создании каждого окна?
Зарегистрируй один раз при запуске программы (загрузке dll), и по завершении один раз вызывай Unregister. -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
Если регистрировать класс в основной программе (один раз), то нужно полученную переменную (WndClass: TWndClassEx) передавать в библиотеку, чтобы там можно было создать окно на базе этого класса, верно? Если так, то нужно передавать в виде параметра основной функции, что мне не подходит из-за наличия других библиотек с таким же объявлением функции. Есть ли какие-то альтернативы здесь?
|
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Можно добавить в dll функции Initialize/UnInitialize
А можно использовать dllMain... Концовка dll должна выглядеть примерно так
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 3 Всего: 128 |
По поводу отключения звука, советую скачать и поковырять, или даже заюзать EmbeddedWB.
У него есть опция, отключающая звук... можно посмотреть, как это в нем реализовано. Не знаю, те ли это звуки....
А еще там есть DownloadOptions. там много чего можно поотключать) Во. DLCTL_DOWNLOADONLY: The page will only be downloaded, not displayed. Наверное то, что нужно. не? Это сообщение отредактировал(а) MetalFan - 8.6.2012, 18:28 -------------------- There are always someone smarter than you... |
|||
|
||||
M1ndAction |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 19.1.2008 Репутация: нет Всего: нет |
ok, спасибо, посмотрю. Сейчас программа на общем тестировании, после реализую ваш вариант. Пока проблема со звуком не критична - всего один сайт такой был, поэтому пока как исключение идет. По результатам тестирования уже будем смотреть, спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |