|
|
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Буду признателен, тем кто работает с CEF3/CEF4 для Delphi за помощь. Некоторые сайты используют CloudFlare, поэтому простым IdHTTP не обойтись - нужен более менее полноценный и современный браузер с поддержкой js/ajax. А то встроенный древний IE подвисает 21931836 . Как я уже давно понял, любому браузеру нужна визуальная форма для работы и в потоке без видимой на экране формы он работать не будет. Поэтому появилась идея вынести загрузку страницы из потока на форму с использованием synchronize. Может быть будет правильнее вместо доступа к форме и браузеру использовать не synchronize, а какие-то другие методы "общения"? Или вообще реализовать идею без потока. Может хромиум умеет "нажимать" на ссылку как это делает пользователь мышкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 11:50 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Самое универсальное решение - отдельный браузер, запущенный в режиме WebDriver. Софт для внутренних нужд или на распространение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 12:03 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
На распространиние, правда в "единичном" экземпляре :) Василий 2браузер, запущенный в режиме WebDriver это как? что для этого надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 12:05 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, В CEF4 можно вызывать любой javascript код, делать инъекции. Загрузил код, вызвал нужные функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 12:13 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Да, читал краткую инфу. но мне всего-то нужно "пробежаться" по страничкам и получить InnerHTML. InnerHTML уже понял как получать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 12:58 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Василий 2браузер, запущенный в режиме WebDriver это как? что для этого надо? Браузер, WebDriver-драйвер (гы) и обвязка REST интерфейса. Для Хрома, например, http://chromedriver.chromium.org/downloads Но если просто нужно тыкнуть мышкой, это оверхед. Действительно попробуй CEF, а если нужна параллельность и с потоками не заладится - можно организовать субпроцессы вместо потоков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2019, 14:15 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Часто встречается какой-то "Visitor". Что это такое? function CookieVisitorProc CookieVisitor TCefFastCookieVisitor OnNavigationVisitorResultAvailable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 13:00 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
А есть у кого простой пример работы с куками? Как задать папку хранения, например? Т.к. то ,что есть здесь http://parsing-and-i.blogspot.com/2013/01/tchromium-cookies-in-delphi.html уже устарело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 13:01 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Как задать папку хранения, например? Код: pascal 1. Теперь и кэш, и куки хранятся в общей папке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 13:25 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Мало того, все настройки нужно выполнять до строки GlobalCEFApp.StartMainProcess; см. пример в файле SimpleBrowser2.dpr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2019, 16:13 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ппц :( это сложнее, чем я ожидал + 10 в карму, есть поможете понять, как после загрузки страницы найти определённый текст и ссылку, а потом и "щёлкнуть" по ней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 12:58 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11ппц :( это сложнее, чем я ожидал + 10 в карму, есть поможете понять, как после загрузки страницы найти определённый текст и ссылку, а потом и "щёлкнуть" по ней 1. исходный текст не получается? 2. в тексте не получается найти нужное? 3. в найденном не получается извлечь href? 4. не получается вызвать загрузку по указанному url? на каком пункте непонимание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 13:54 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Есть примеры процедур SimpleNodeSearch и SimpleDOMIteration в демках. Разбираю их. Как я понял из примеров и комментариев, нужно использовать OnProcessMessageReceived. да, я так и делаю: GlobalCEFApp.OnProcessMessageReceived := GlobalCEFApp_OnProcessMessageReceived; автор https://www.briskbard.com/forum/viewtopic.php?f=8&t=861&p=3993#p3840 you will need to send messages to the browser process unit uDOMVisitor// To send messages from the render process you must use the browser.SendProcessMessage // procedure with a PID_BROWSER parameter. The browser process receives those messages in // the TChromium.OnProcessMessageReceived event. Далее. В качестве параметра в SimpleNodeSearch и в SimpleDOMIteration нужно передать aDocument: ICefDomDocument, т.к. обе процедуры принимают его на вход. Вот тут и начинаются танцы с бубном. Событие GlobalCEFApp_OnProcessMessageReceived получает и обрабатывает сообщения. Я знаю, как послать сообщение: Код: pascal 1. Теперь остаётся понять: откуда его правильно посылать? здесь автор меня запутал https://www.briskbard.com/forum/viewtopic.php?f=8&t=861&p=3993 то пишет, что нужно: Код: pascal 1. а потом, как я вроде бы понял, это неправильно. После окончательной загрузки страницы ведь это нужно делать? В каком событии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 14:13 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11и в потоке без видимой на экране формы он работать не будет.Что мешает создать оконный цикл в нужном потоке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 15:03 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 15:19 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Разметка произвольная? Может просто тупо внедрить на страницу свой JS и уже с его помощью искать и "кликать" по ссылкам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 15:37 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Может быть, я не знаю. Я пока ещё даже искать не научился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 15:50 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Мне казалось бы какой-то пример работы CEF без визуального рендера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 16:18 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
эммм, что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 16:19 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Может быть, я не знаю. Я пока ещё даже искать не научился. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 17:06 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
это точно для cef4delphi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 17:08 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Да. Проверял на странице данной темы. Или давай ссылку на сайт, на котором нужно жмякнуть ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 17:11 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
SallerИли давай ссылку на сайт, на котором нужно жмякнуть ссылку. Жмакай на сиквел.ру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 19:46 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
так это ж не дельфи-код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 19:48 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
SallerX11, Да. Проверял на странице данной темы. Или давай ссылку на сайт, на котором нужно жмякнуть ссылку. doska.plus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2019, 19:49 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11doska.plus Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 09:38 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Так это ж недельфи код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 09:44 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Так это ж недельфи кодТебе ведь нужно кликнуть на странице по ссылке? Скриптом это сделать проще всего (скармливай скрипт CEF4D). Собрать нужную информацию тоже можно скриптом, но на Делфи это тоже без особых проблем можно сделать. В чем сложность? Может я не правильно понял твою задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 09:59 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
я не понимаю, что такое скармливай. как, куда? где, в какой момент? Я cef4 только начал изучать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 10:29 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
SallerМожет я не правильно понял твою задачу. Задача простая: спарсить параметры объявления + контакты в свою базу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 10:30 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Это бессмысленная задача причем даже в ближайшей перспективе :) Сейчас телефон в текстовом виде, а когда запалитесь он станет в виде картинки, начнете распознавать картинку и он станет с вотермарками и прочими прелестями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 11:50 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11я не понимаю, что такое скармливай. как, куда? где, в какой момент? Я cef4 только начал изучать Возьми любую демку CEF4Delphi (например MiniBrowser), добавь туда Memo поле для ввода скрипта и кнопку для выполнения скрипта. В Обработчике клика кнопки прописывает Код: pascal 1. Заходим на страницу объявления и выполняем скрипт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 12:40 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 12:47 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Отлично. Спасибо. А как узнать, что страница полностью загружена? Использую OnLoadEnd, но оно срабатывает несколько раз, видать на окончание загрузки каждого фрейма. но строка Код: pascal 1. всегда возвращает false ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 13:01 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Отлично. Спасибо. А как узнать, что страница полностью загружена? Использую OnLoadEnd, но оно срабатывает несколько раз, видать на окончание загрузки каждого фрейма. но строка Код: pascal 1. всегда возвращает falseКак вариант в событии OnLoadEnd перечитывать список фреймов и проверять все ли фреймы прогрузились. Но это конечно костыльный вариант, лучше спросить у разраба какие есть варианты определения полной загрузки страницы. Хотя может хватить и загрузки главного фрейма, чтобы начать выполнять свои операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 14:05 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Или же в событии LoadingProgressChange дождаться 100% загрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 14:08 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
в onLoadError появляется ошибка Chromium1.LoadEnd, frame url: about:blank Error code:-3 - Error text :'ERR_ABORTED' - URL: https://www.facebook.com/tr/ и на этом, как я понял, дальнейшая загрузка прекращается... а что сделать, чтобы ошибка игнорировалась и загрузка продолжалась? Или где и как правильно вставить Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 14:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, проскакивал тут как-то интересный топик с (мне тогда) неизвестным термином "HeadLess browser": Delphi + HeadLess браузер . Может поможет как-нибудь ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 14:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Безголовый браузер и код на ноде или яве - это наилучшее решение по безгеморройности и быстроте написания. Но если это не вариант, то внедрение на страницу своего скрипта будет очень хорошим и гибким вариантом. Скрипт можно класть рядом с программой и менять без пересборки, а из js жонглировать DOM объектами куда проще, чем из интерфейса обертки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2019, 18:52 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Подскажите, а у браузера есть возможность получить InnerHTML? Я почитал: https://www.briskbard.com/forum/viewtopic.php?t=157#p567 дык там нужно такой... огород городить приходится О_о Ну т.е. нет ли чего-нибудь типа Chromium1.Browser.MainFrame.InnerHTML? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 16:16 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, в LoadEnd Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 20:44 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
а ... InnerHTML ... напутал..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 20:45 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Ещё вопрос по примеру DOMVisitor. В процедуре GlobalCEFApp_OnProcessMessageReceived есть возможность обратиться к фреймам. Хочу сделать цикл по фреймам, но FrameCount возвращает 0 и CefFrameIdentifierArray тоже нулевого размера. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 21:07 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
при этом Код: pascal 1. возвращает 3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 21:18 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
дошло, нужно TempHead := aDocument.Body; вместо TempHead := aDocument.Head; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2019, 22:27 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Итак... чтобы кликнуть на ссылку и потом получить текст страницы нужно примерно такие действия. Делал на примере MiniBrowser. В событии TChromium1 OnLoadEnd отправляем сообщение процесу рендеринга: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В событии GlobalCEFApp.OnProcessMessageReceived ловим это сообщение: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. В процедуре DOMVisitor_OnDocAvailableSearch есть доступ к ICefDomDocument, именно он и нужен для итерации по DOM: Код: pascal 1. 2. 3. 4. 5. Цикл по DOMу Код: 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. отправляем в TMemo то, что прилетело из глобального процесса-рендеринга в message Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 17:34 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
VisitDom работает только в процессе, который занимается рендерингом Код: pascal 1. Поэтому DOMVisitor_OnDocAvailableSearch и SimpleDOMIteration бесполезно вызывать из своего приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 18:06 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я пока так и не понял, что такое TCefFastDomVisitor2 и с чем его едят как и где правильно его использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2019, 18:07 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Посоветуйте, как лучше и правильней организовать парсинг в потоке с видимым окном. Как из потока обращаться к окну, где будет работать компоненты TChromium + TCEFWindowParent? Нужно же обмениваться данными и не просто в 10-20 символов. Просто Syncronize не подойдет, должна же быть какая-то взаимосвязь, отдача, очередь, синхронность? Хоть с чего начать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 11:22 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, а что не так с Synchronize? Если туда передать объект, то можно и данными обмениваться. Можно через SendMessage передать указатель на объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 12:18 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Сформулируй задачу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:01 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Парсинг сайта в отдельном потоке с использованием Cef4Delphi без дополнительного окна. По ходу действа искать не только нужный текст, который можно сохранить в базу, но и нужный текст ссылок, по которым нужно кликать, например, чтобы открыть объявление, контакты или вернуться назад и перейти не следующую страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:11 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Парсинг сайта в отдельном потоке с использованием Cef4Delphi без дополнительного окна. По ходу действа искать не только нужный текст, который можно сохранить в базу, но и нужный текст ссылок, по которым нужно кликать, например, чтобы открыть объявление, контакты или вернуться назад и перейти не следующую страницу. Зачем парсить сайт в отдельном потоке? Chromium создает несколько процессов для парсинга, тебе этого мало? Может сделать со скрытым окном? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:21 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:27 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ziv-2014Зачем парсить сайт в отдельном потоке? Chromium создает несколько процессов для парсинга, тебе этого мало? потому что не хочется создавать новый проект и новую программу, в которой уже есть несколько других работающих парсеров, так сказать оболочка есть и к ней нужно прикрутить ещё один с браузером и чтобы не машать работе пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:29 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Разве примера из DOMVisitor не достаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:35 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
SallerX11я не понимаю, что такое скармливай. как, куда? где, в какой момент? Я cef4 только начал изучать Возьми любую демку CEF4Delphi (например MiniBrowser), добавь туда Memo поле для ввода скрипта и кнопку для выполнения скрипта. В Обработчике клика кнопки прописывает Код: pascal 1. Заходим на страницу объявления и выполняем скрипт. получилось без окон и панелей загрузить страницу в фоне и выполнить JS Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В итоге в консоль в DevTools попало сообщение "my click" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:36 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11ziv-2014Зачем парсить сайт в отдельном потоке? Chromium создает несколько процессов для парсинга, тебе этого мало? потому что не хочется создавать новый проект и новую программу, в которой уже есть несколько других работающих парсеров, так сказать оболочка есть и к ней нужно прикрутить ещё один с браузером и чтобы не машать работе пользователя. Вы не понимаете, как работает chromium. Там есть очередь обработки сообщений. Все операции выполняются в отдельных потоках. Результат выводится в главный поток для отображения. Все операции, которые происходят внутри, chromium уже распределяет по нужным ему потокам. Если вам надо сделать в отдельном потоке, то вам надо делать окно в отдельном потоке и обрабатывать сообщения этого окна. Но по-моему это большие грабельки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:40 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ziv-2014X11, Разве примера из DOMVisitor не достаточно? Изучаю три примера. На данный момент волнует вопрос, можно ли управлять общаться с браузером не из главного потока программы, а из дополнительного. Пока не пробовал. Пока изучаю ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:42 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ziv-2014Вы не понимаете, как работает chromium. не спорю, поэтому и пытаюсь изучать и понять. К сожалению инфы на русском мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2019, 16:42 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Подскажите, а что нужно указывать в качестве NodeID? Код: 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. передаю "ad-author-contact-row-content" или "ad-author-contact-row-content j-c-phones" и процедура его не находит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 13:52 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Это классы а не id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 13:58 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Ну т.е. с помощью GetElementById не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 14:04 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 14:29 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ок, тогда с помощью чего найти телефон или признак телефона во время итерации по DOM? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:07 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, Ну например использовать префикс tel в href ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:09 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
asviridenkovиспользовать префикс tel в href не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:13 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Если на примере цикла итерации по DOM, то как? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:19 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я ещё не могу понять/найти: в каком свойстве, где живёт то, что на картинке подчеркнуто в программе в ICefDomNode? Т.е. как выловить, в каком свойстве вот то название класса "ad-author-contact-row-content j-c-phones", чтобы как можно ближе подобраться к телефону. Т.е. когда я в Firefox выбираю "копировать/внутренний HTML", то копируется: <span><a href="tel:+xxxxxxx0">+xxxxxxx0</a></span> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:24 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
я забыл про рекурсию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2019, 15:59 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11.е. как выловить, в каком свойстве вот то название класса "ad-author-contact-row-content j-c-phones", чтобы как можно ближе подобраться к телефону. Т.е. когда я в Firefox выбираю "копировать/внутренний HTML", то копируется: в общем, там ещё есть "TempChild.AsMarkup", т.е. можно использолвать вместо "TempChild.ElementInnerText" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2019, 12:04 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 Код: pascal 1. извините за такой вопрос, но сегодня пятница, так что можно Я не могу понять, обходит ли SimpleDOMIteration() ВСЕ узлы и все уровни дерева DOM или только узлы верхнего уровня? Процедура не является рекурсивной, но вижу заход (TempChild := TempHead.FirstChild) на дочерние узлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2019, 13:20 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В общем, вот такая конструкция у меня получилась, может кому пригодится. найти нужный атрибут и значение узла в цикле по DOM Код: 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. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2019, 15:48 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Это же жесть -- вручную перебирать всю структуру DOM. Есть всякие css-селекторы, которые простыми командами могут найти и вывести любое количество элементов. Судя по вот этому -- CEF полностью поддерживает querySelectorAll . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2019, 22:43 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Это просто один из способов. Тем более, не надо изучать JS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2019, 09:50 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
JaDiCEF полностью поддерживает querySelectorAll . CEF4Delphi поддерживает внедрение JS в страничку 21954002 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2019, 09:52 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
JaDiЭто же жесть -- вручную перебирать всю структуру DOM. Хорошо. А как получить в свою программу из документа определённый контент, содержимое той или иной ноды? Но без установки доп. расширений в CEF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 10:24 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11JaDiЭто же жесть -- вручную перебирать всю структуру DOM. Хорошо. А как получить в свою программу из документа определённый контент, содержимое той или иной ноды? Но без установки доп. расширений в CEF. Это риторический вопрос в стиле "как из процедуры вернуть результат, не преобразовывая ее в функцию". Хром -- асинхронный. Чтобы что-то из него получить, необходимо дождаться результата. Это можно сделать разными способами -- от eval и extention до вечного while в ожидании появления новых данных в скрытом dom-элементе. См. примеры в "\demos\Delphi_VCL\JavaScript", как там значения возвращаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 11:30 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Если вы загружаете скрипт из файла в кодировке UTF-8, то не забудьте перед его внедрением в CEF конвертировать в string: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 12:30 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я правильно понимаю, что Код: pascal 1. Создаётся глобально для всей системы, а не только для моей программы и тем более не только для доп. потока(ов) приложения? Я про то, что когда TChromium (PID_BROWSER) и процесс рендерига (PID_RENDERER) обмениваются между собой сообщениями Код: pascal 1. в сообщении нужно конкретизировать как-то - что и кому предназначено? Если в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:06 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ведь процесс создания браузера запускается из DPR файла, т.е. непосредственно ещё до старта моего приложения Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Получается, что процедура GlobalCEFApp_OnProcessMessageReceived ловит сообщения от всех экземпляров TChromium из разных потоков приложения? Каждый отдельный поток парсит свой отдельный сайт. Нормально ли будет работать браузер? Первый поток Chromium1.LoadURL(...); Загрузка этого сайта даже не завершилась, а тут Второй поток Chromium2.LoadURL(другой сайт); нормально ли завершиться загрузка первого сайта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Конечно нормально. Там же асинхронное всё, да еще и в своих собственных процессах крутится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:31 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Если в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим? как правильно? или нет разницы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:32 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Просто я собираюсь использовать Chromium в headless режиме и там не будет TCEFWindowParent. Вот если в приложении несколько вкладок или пользователь сам создает вкладки, как это в классическом браузере, то достаточно одного экземпляра Chromium, как я понимаю? Просто будет вот так: Код: pascal 1. 2. 3. Но у меня-то не будет разных CEFWindowParent. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 13:39 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
CEFWindowParent1 -- это визуальный компонент, где будет идти отрисовка конкретного экземпляра браузера. В соседней же теме было, что для работы в безрендеринговом режиме можно туда nil передавать. Для потоков должен быть свой собственный браузер TChromium.Create ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 14:00 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
JaDiCEFWindowParent1 -- это визуальный компонент, где будет идти отрисовка конкретного экземпляра браузера. В соседней же теме было, что для работы в безрендеринговом режиме можно туда nil передавать. это я всё знаю уже давно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 14:09 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
JaDiДля потоков должен быть свой собственный браузер TChromium.Create Вы не понимаете мои вопросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 14:09 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11Вы не понимаете мои вопросы? Ответ был на это: авторЕсли в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2019, 14:16 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Возникла проблема в реальной программе. Программа защищается с помощью ASProtect SKE. Т.е. где-то в какой-то форме, которая создается по кнопке есть использование сторонней dll. Так вот, при инициализации CEF`а происходит исключение (exception). Хотя строка инициализации CEF`а Код: pascal 1. идёт самой первой после begin в dpr. Как обойти проблему? На всякий случай прикреплю код получения HardwareID Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. в aspr_api.pas есть Код: pascal 1. 2. 3. 4. 5. 6. 7. т.е. нужно как-то заставить dll`ку грузиться позже? или.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2019, 10:46 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В принципе, у меня всё взлетело и парсинг работает в отдельном потоке без окон, т.е. в режиме headless. Осталось решить проблему с загрузкой сторонней dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2019, 16:17 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
А как получить скриптом то, что всплывает в окне? Вот мой код, я сделал по принципу, как на других сайтах. Но функция поиска телефона (FindTel) ищет номер в текущем документе, а нужно в новом окне. JS Код: javascript 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. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2019, 17:55 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Это не окно, а просто див, который так же в структуре document сидит. Просто селектор не рабочий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2019, 18:27 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
т.е. нужно выяснить, что вставить вместо ??? в Код: javascript 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2019, 18:43 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
нашёл div.sc-iwsKbI.kiAeTp a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2019, 18:52 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
А как получить полностью всю страничку как она есть? Потому что document.Body.AsMarkup возвращает только часть html-странички. т.е. приходится клеить document.Head.AsMarkup + document.Body.AsMarkup ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2019, 12:16 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Странно, сохранил страничку в текст. А она в кодировке ANSI. Так и должно быть? Снимок с виндового Блокнота: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2019, 13:14 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
А кто-нибудь пробовал нажать программно на гугловскую рекапчу? Обойти её... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2019, 23:25 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Подозреваю, если бы это было так просто, то в ней не было бы никакого смысла)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 10:02 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Я не про распознавание картинки. Иногда рекапча не показывает картинок, нужно просто кликнуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 10:18 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Так а в чем проблема-то? Находишь ДОМ элемент, кликаешь. Только опять же, она не просто так не показывает картинки. Иначе это была бы не каптча. Насколько я знаю, она анализирует действия юзера на страничке, и если он похож на человека, то картинки не показываются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 13:55 |
|
||
|
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 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, так красивше Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2020, 18:08 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Не могу понять, почему загрузка стартует только при повторном нажатии на кнопку Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. при этом срабатывает событие OnAddressChange и значение url в этот момент About:Blank. edUrl.Text точно заполнено ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2020, 17:38 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Не могу понять, что означает параметр line, для чего он: Код: pascal 1. даже здесь не нашёл нормального описания https://magpcss.org/ceforum/apidocs3/projects/cef.logging/cef_logging.h.html Код: plaintext 1. 2. 3. 4. 5. 6. 7. где искать этот конструктор? конструктор чего именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 15:48 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 Не могу понять, что означает параметр line, для чего он: [SRC pascal][/SRC] X11, конcтруктор класса LogMessage. А line - это номер строки, где "это" случилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 17:31 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
ааа, line - это я сам должен посмотреть номер строки и этот номер указать? Прикол в том, что номер строки же постоянно меняется процессе редактирования своих исходников. По сути, туда можно передавать просто любое число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 17:37 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 ааа, line - это я сам должен посмотреть номер строки в своём pas-файле и этот номер указать? Прикол в том, что номер строки же постоянно меняется в процессе редактирования своих исходников. По сути, туда можно передавать просто любое число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 17:38 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11, а чего это ты вообще в сишные дела полез? Номер строки в паскаль-файле автоматом поймать можно, но не просто так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 17:49 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Потому что у автора Cef4Delphi описания не нашёл, пришлось лезть в исходники самого движка CEF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 20:11 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Вопрос по Chromium.ExecuteJavaScript() Если скрипт живет в файле и там используются одинарные кавычки в разных местах, то нужно ли JS код заключать в QuotedStr() или нужно каждую кавычку дублировать? Или загружать как есть? Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2020, 12:44 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
В общем, я так понял, что не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2020, 14:41 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
я так понял, на вебсокеты у CEF вообще ничего нет, если не считать серверную часть. Печально, очень печально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2020, 21:08 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
Vizit0r, это что значит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2020, 09:28 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 Не могу понять, почему загрузка стартует только при повторном нажатии на кнопку Не могу понять, почему в логах есть записи о загрузке пустой страницы (about:blank). Как я понял, то при: Код: pascal 1. всё равно стартует загрузка страницы и загружается страница по умолчанию Chromium.DefaultUrl поэтому правильно так: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2020, 19:17 |
|
||
|
CEF4Delphi в потоке с внешней формой
|
|||
|---|---|---|---|
|
#18+
X11 Vizit0r, это что значит? это я леплю связку для проксирования пакетов из вебсокетов, чтобы их читать в реальном времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2020, 22:22 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038489]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
160ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 604ms |

| 0 / 0 |
