|
|
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В общем, не так всё просто. Там куча событий используется и обрабатывается, в том числе и движение курсора мышки внутри фрейма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 14:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, посмотрите в сторону nwjs или electron либо другую реализацию в виде headless так вы избавитесь от кучи костылей и получите актуальную версию браузера со всеми новыми фишками V8\JS и т.д. как вариант: - запускаете nwjs\eletron\headless приложение -- окно скрыто по умолчанию, его всегда можно показать при необходимости либо показать нужную часть - передаете адрес который необходимо посетить -- получаете уведомление о полной загрузке страницы - получаете код всей страницы - выполняете необходимые действия на сайте P.S. если задач не много могу оказать помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 22:21 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я только-только более менее начал понимать, как работает Chromium api. Плюс Chromium - это полноценный браузер с консолью и со встроенными средствами отладки полноценного браузера. А ты предлагаешь изучать что-то новое. Мало того, ничего полезного я не нагуглил на тему: nwjs + delphi, а на тему Chromium + Delphi информация есть, пусть не так и много, но всё же есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 23:53 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 Я только-только более менее начал понимать, как работает Chromium api. Плюс Chromium - это полноценный браузер с консолью и со встроенными средствами отладки полноценного браузера. А ты предлагаешь изучать что-то новое. Мало того, ничего полезного я не нагуглил на тему: nwjs + delphi, а на тему Chromium + Delphi информация есть, пусть не так и много, но всё же есть. Электрон это тот же хромиум. Но Дельфи там, разумеется, никаким боком не применяется. Разве что FPC-шный pas2js присобачить X11 В общем, не так всё просто. Там куча событий используется и обрабатывается, в том числе и движение курсора мышки внутри фрейма. Еше бы ))) вопрос был из серии "банкомат требует пин-кода карточки, на что нажать, чтобы его не вводить?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 11:37 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Василий 2, не понял, и что? Ещё раз. Я ничего не нашёл в сети по nwjs + delphi. Мне что, самому нужно писать обёртку вокруг nwjs? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 11:41 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
На сколько я понял, то Electron и nwjs - это для создания приложений, чтобы отображать веб-контент. У меня задача немножко другая. Мну нужно парсить сайты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 11:49 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Electron это движок браузера без обвязки, соответственно он позволяет писать приложения на html+js. Ну и отображать сайты, разумеется. Но в общем случае CEF не имеет особых недостатков по сравнению с предложенным вариантом. Разве что вот каптчу обмануть... можно попробовать мышью над страницей "пошевелить". Но это опять же, с наскоку обмануть кодеров Гугла разве что гений сможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2019, 14:29 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Чтобы "выловить" ответ (содержимое) response, приходится использовать монстро-код, но беда не в этом, а в том, что этот код работает на базе виндовых оконных сообщений (Winapi.Messages). Это я изучаю пример ResponseFilterBrowser. А у меня браузер работает в потоке, без окон. При чем класс, в котором создаётся и работает парсер и сам браузер не имеет доступа к модулю потока. Я читал и смотрел примеры по Winapi.Messages в потоках, но там всё основано на том, что код обмена сообщениями находится непосредственно в модуле (в pas-файле) самого потока, в Thread.Execute. Нет ли более менее простого способа, чтобы заменить Winapi.Messages на что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 12:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В потоке вполне себе может быть окно, в чем проблема-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 14:15 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
вот в чем X11 Я читал и смотрел примеры по Winapi.Messages в потоках, но там всё основано на том, что код обмена сообщениями находится непосредственно в модуле (в pas-файле) самого потока, в Thread.Execute. вот пример https://rsdn.org/forum/delphi/3112311.hot Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. а мой код работает далеко не в TMsgThread.Execute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 14:28 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Ну и не нужно. Создай в начале Thread.Execute окно через AllocateHWnd и твори в обработчике что надо из другого модуля. Или вообще создаешь окно, в конструкторе либо до запуска задавай объект-заглушку, а при получении сообщения вызывай TObject.Dispatch. Преимущество тут в том, что не надо писать WndProc метод, можно задать обработчики как TMsgHandler.Msg_That(var Message); message MSG_THAT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 16:02 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Что за код? Выложи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 16:53 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ziv-2014, код именно чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 16:58 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В общем, я посмотрел пример использования компоненты TCEFUrlRequestClientComponent. Добавил модуль TCEFUrlRequestClientComponent и в событии Chromium1.OnResourceResponse запускаю процедуру скачивания, типа: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 17:01 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 ziv-2014, код именно чего? Чтобы "выловить" ответ (содержимое) response, приходится использовать монстро-код, но беда не в этом, а в том, что этот код работает на базе виндовых оконных сообщений (Winapi.Messages). Это я изучаю пример ResponseFilterBrowser. Получения ответа response ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 17:02 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Ещё один вариант мне предложили. Где-то, в какой-то момент с пом. JS скачивать ещё раз тело ответа и внедрять его прямо в HTML, чтобы парсер видел прямо в теле страницы нужные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 17:11 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ziv-2014 X11 ziv-2014, код именно чего? Чтобы "выловить" ответ (содержимое) response, приходится использовать монстро-код, но беда не в этом, а в том, что этот код работает на базе виндовых оконных сообщений (Winapi.Messages). Это я изучаю пример ResponseFilterBrowser. Получения ответа response так это стандартный пример, см в папке CEF4Delphi\demos\Delphi_VCL\ResponseFilterBrowser ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2020, 17:12 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Василий 2 Ну и не нужно. Создай в начале Thread.Execute окно через AllocateHWnd и твори в обработчике что надо из другого модуля. Дело в том, что у меня как раз всё в другом модуле и работает. В модуле создания и запуска потока только одно действие в Execute - создание объекта (класса) парсера и старт этого парсера. В методе Execute нет никаких while ... repeate ... terminate. Просто выполнить один проход и завершить поток. вот пример старта парсинга: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. вот там, внутри, под капотом у Parser.DoParse и работает Хромиум. Т.е. не в этом модуле нужно создавать окно AllocateHWnd и обработку сообщения (PeekMessage), а именно в модуле Parser: TParseXXXXX??? Я правильно понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2020, 13:10 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Или где-то внутри Parser: TParseXXXXX нужно создавать ещё один "внутренний" поток и в нем запускать цикл ожидания, получения и обработки сообщений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2020, 13:46 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Ну стало быть надо залезать внутрь DoParse. Я не очень понял, как у тебя хромиум может "работать через сообщения", если ты его засовываешь в цикл. Обычная схема работы с выборкой сообщений в потоке - в Execute: Код: pascal 1. 2. 3. 4. 5. Как там устроен парсер - по названию функции сложно сказать, нужно больше деталей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2020, 18:09 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В DoParse организован тупо цикл whilte true по страницам сайта. Василий 2 . Я не очень понял, как у тебя хромиум может "работать через сообщения", А он у меня и не работает через сообщения. Я ж написал вроде, что это в официальном примере получение response-содержимого через сообщения реализовано. Если у вас установлен Хромиум в Дельфи, откройте и посмотрите (CEF4Delphi\demos\Delphi_VCL\ ResponseFilterBrowser ). А у меня Хромиум скачивает странички примерно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Ну там ещё около 10+ разных событий и вспомогательных методов. Вот я и хочу пример из ResponseFilterBrowser применить для себя. Может быть есть возможность заменить сообщения на другой вид обмена, т.к. фактически скачивание и получение response-содержимого живет в одном классе, в одном модуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2020, 15:45 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я думаю, что отправку сообщения самому себе можно заменить процедурой ожидания, где будет цикл while true, как в вышеописанном методе GetInnerHTMLPage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2020, 16:06 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Да, в примере PostMessage просто чтобы не блокировать форму, в случае потока можно заменить на вызовы соответствующих функций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2020, 16:43 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я так и не разобрался, что это за WasHidden Код: pascal 1. но если вызывать этот метод, то не все ссылки и не вся страничка грузится просто имейте ввиду Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2020, 17:23 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39915561&tid=2038489]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
141ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 472ms |

| 0 / 0 |
