Посоветуйте компонент аналог WebBrowser

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Santa
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 101
Зарегистрирован: 07.05.2004 (Пт) 1:34
Откуда: KZ

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Santa » 16.08.2012 (Чт) 19:24

Хакер писал(а):Зачем в файл сохранять?

Страниц предпологается очень много, поэтому это много лучше сперва выкачать, а уже потом отпарсить в оффлайне.

Хакер писал(а):Всё очень просто.

Для меня это не так. Всё очень просто, это когда вот так примерно
Код: Выделить всё
Dim RootDoc As New HTMLDocument
szGEBI = RootDoc.getElementById("NeedID").innerHTML

Дело только за малым, передать код из сохранённого файла в объект класса.
SIVIS PACEM PARA BELLUM

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 17.08.2012 (Пт) 2:42

Santa писал(а):Страниц предпологается очень много, поэтому это много лучше сперва выкачать, а уже потом отпарсить в оффлайне.

Не вижу логики. Пока страницы качаются, компьютер простаивает. Пусть они качаются, а в паузах между приходами блоков по сети — разбираются.

Santa писал(а):Всё очень просто, это когда вот так примерно

Именно так и придётся выдёргивать элементы из дерева.

Santa писал(а):Дело только за малым, передать код из сохранённого файла в объект класса.

Как это сделать я и написал постом выше. Запросить у объекта класса интерфейс IPersistStreamInit, вызвать метод InitNew, запросить интерфейс IMarkupServices, вызывать два раза CreateMarkupPointer, затем вызвать ParseString. Готово.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 18.08.2012 (Сб) 13:16

Santa писал(а):Дело только за малым, передать код из сохранённого файла в объект класса.

Как альтернатива - невидимый webBrowser (или shdocvw.Internetexplorer), инициализировать Document через Navigate("about:blank"), дальше в сохраненном файле через InStr (или regex, если нравится) ищется текст между тегами <body></body>, ну, и
wb.Document.Body.InnerHTML = strBody. Если надо, можно так же и заголовки добавить.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 18.08.2012 (Сб) 13:31

ark, зачем невидимый WebBrowser, если этот же грязнейший трюк можно проделать и экземпляром HTMLDocument.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 19.08.2012 (Вс) 7:42

Хакер писал(а): зачем невидимый WebBrowser

Пардон, честно говоря, с новым mshtml не проверял, сейчас проверил - действительно работает. Пробовал давно, где-то в районе 6-го эксплорера, без инициализации HTMLDocument через WebBrowser.Navigate, а просто через New - выдававл Automation Error, хоть через Open/Write, хоть через createElement/appendChild. Спасибо, теперь буду знать, что уже работает.

ЗЫ - а почему трюк грязнейший? Если не создавать каждый раз новый документ, ничего лишнего он делать не будет, элементы отрисовывать не надо. Возможно, если по скорости и проиграет прямому обращению к интерфейсам, то совсем чуть-чуть.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 19.08.2012 (Вс) 7:44

Хотя бы тем, что скармпливается на вся страница, а только body-элемент.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 19.08.2012 (Вс) 8:09

Хакер писал(а):только body-элемент

Так это ж не баг, а фича - зачем скармливать лишнее. Ну если хедеры, стили или скрипты критичны, можно таким же способом и их добавить, хотя ТС упоминал вроде, что ему только данные нужны. Если сайт по дизайну более-менее статичный - можно вообще строку парсить.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 19.08.2012 (Вс) 9:23

ark писал(а):Так это ж не баг, а фича - зачем скармливать лишнее. Ну если хедеры, стили или скрипты критичны, можно таким же способом и их добавить, хотя ТС упоминал вроде, что ему только данные нужны. Если сайт по дизайну более-менее статичный - можно вообще строку парсить.

Это не фича, а грязный метод. Страница должна съедена полностью. На результат может влиять и доктайп, и мета-заголовки, и страница может доводиться до ума скриптами.

Зачем вообще извращаться, если правильным способом всё решается в 5 строк? Или не в 5, а в 150, если доделать ещё и разбор по частям, чего кривым способом добиться вообще никогда не удастся. Просто чтобы сделать вопреки всем принципам правильности?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 19.08.2012 (Вс) 9:58

Хакер писал(а): если доделать ещё и разбор по частям
а как быть с
Хакер писал(а):страница может доводиться до ума скриптами
:D

Если пишется свой веббраузер - одно дело, если парсится конкретный сайт -
Ну, дык, работает жеж
:D
Кстати, и HTMLDocument в большинстве случаев сожрет часть странички, выбросив незакрытые/непонятые теги.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 19.08.2012 (Вс) 10:02

ark писал(а): Хакер писал(а): если доделать ещё и разбор по частям
а как быть с
Хакер писал(а):страница может доводиться до ума скриптами
:D

Я не понял, в чём вопрос? И к чему смайл? Очевидно же, что MSHTML предоставляет специальных механизм, который позволяет скармливать разборщику страницу по кускам по мере их получения с сервером. Очевидно, что MSHTML позволяет сохранять контекст разбора, подобно тому, как библиотека crypt позволяет считать хеш стотерабайтных файлов, скармпливая их хешеру по частям и сохраняя между вызовами контекст подсчёта. Очевидно, что обработка скриптов и всего такого будет производиться по мере готовности необходимых для этого элементов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 19.08.2012 (Вс) 10:09

То есть для 100% заполненной страницы в общем случае надо таки дождаться загрузки всего документа? Чего тогда "кривой способ" не умеет?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 19.08.2012 (Вс) 10:11

Почему ты такой трудный?
Твой способ имеет проблемы, и их можно долго перечислять.
Но так дело даже не в этом, если бы не удалось найти ни одной проблемы, он всё равно был бы плох, потому что в MSDN указан правильный пусть инфициализации.

Поскольку мы ничего не знаем о внутренней логики MSHTML, и поскольку это довольно сложная библиотека, единственный приемлемый способ: это играть по правилам и не даже не сметь задумываться об альтернативных путях.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 19.08.2012 (Вс) 10:24

Хакер писал(а):Твой способ имеет проблемы, и их можно долго перечислять
Да я ж и не спорю - но, ИМХО, в зависимости от задачи, можно и "грязные хаки" использовать.
Хакер писал(а):единственный приемлемый способ: это играть по правилам и не даже не сметь задумываться об альтернативных путях.
Ну, во первых, это скучно. А во вторых - MSDN - это не Holly Book. Ты сам-то сколько написал, чего в MSDN указано - на ВБ ето сделать невозможно. Я, когда MSDN пожиже была, только этим и занимался :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Посоветуйте компонент аналог WebBrowser

Сообщение Хакер » 19.08.2012 (Вс) 14:51

ark писал(а):Ты сам-то сколько написал, чего в MSDN указано - на ВБ ето сделать невозможно.

Не понял. Чего на VB сделать невозможно из того, что я написал?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ark
Бывалый
Бывалый
 
Сообщения: 216
Зарегистрирован: 18.07.2011 (Пн) 0:57

Re: Посоветуйте компонент аналог WebBrowser

Сообщение ark » 20.08.2012 (Пн) 3:53

Хакер писал(а):Чего на VB сделать невозможно из того, что я написал
Reverse
На VB можно сделать (почти) всё. Однако MSDN часто утверждает, что гораздо меньше.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList