Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно получить текст с web-страницы ? Не HTML-контент, а именно текст. 
:(
    Опции темы
Naghual
Дата 13.3.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Ну хотя бы так:
Код

Private Sub Command1_Click()
        tbl.MoveFirst
        WebBrowser1.Navigate (tbl!url)
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
    MsgBox WebBrowser1.Document.body.innerText
    if not tbl.EOF then
        tbl.MoveNext
        WebBrowser1.Navigate (tbl!url)
    end if
End Sub


Это сообщение отредактировал(а) Naghual - 13.3.2008, 17:25


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 13.3.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



А по какой причине 
Код

WebBrowser1.Document.body.innerText

может возвращать пустое значение ? Хотя страница в браузер грузится.
PM MAIL   Вверх
Naghual
Дата 13.3.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Ну например, если страница из фреймов.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 14.3.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



Нет, фреймов нет. Что-то все равно я не так делаю :(

Код

Private Sub Command1_Click()
    Dim db, tbl, sql, tmp_url
    Set db = CreateObject("ADODB.Connection")
    Set tbl = CreateObject("ADODB.RecordSet")
    db.Open ("base")
    sql = "select * from table where tmp = False"
    tbl.Open sql, db, 3, 1
    tbl.MoveFirst
    
    id.Text = tbl!n
    
    WebBrowser1.Navigate tbl!url
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
    MsgBox WebBrowser1.Document.body.innerText
    
    Dim db, tbl, sql, tmp_url
    Set db = CreateObject("ADODB.Connection")
    Set tbl = CreateObject("ADODB.RecordSet")
    db.Open ("base")
    sql = "select * from table where tmp = False"
    tbl.Open sql, db, 3, 1
    
    If Not tbl.EOF Then
        tbl.MoveNext
        
        id.Text = tbl!n
        
        db.Execute "UPDATE table SET table.tmp = True WHERE (((table.N)=" & id.Text & "));"
        WebBrowser1.Navigate tbl!url
    End If
    
    tbl.Close
    Set tbl = Nothing
    db.Close
    Set db = Nothing
End Sub


Выдается пустой MsgBox, хотя если открыть этот урл по-простому
Код

WebBrowser1.Navigate ("нужный_мне_урл")
'тут надо что-то типа паузы или проверки, что все загрузилось
MsgBox WebBrowser1.Document.body.innerText

то все отображается нормально. Бьюсь, как рыба об лед. Решение где-то совсем уже рядом.

С уважением, Сергей.
PM MAIL   Вверх
AlexChuntonov
Дата 14.3.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 14.3.2008

Репутация: нет
Всего: нет



Народ! Похожая проблема...
Необходимо отслеживать изменеие некое инфы на странице. Структура документа сильно фреймованная. До нужного фрейма посредством DOM добрался. Свойство innerHTML и innerText не возвращает то, что нужно, ибо контент динамический...
Скрипт генерит контент весьма кудряво. Да и сам скрипт, генерящий контент, генерится многоступенчато другим скриптом из другого фрейма. Ну вот такой вот веб-программер извращенец...
НУЖНО:
нужно то, что показывается по меню правой кнопки, пункт "Исходный текст"
Можно конечно и хэндл окна получить, и мессиджи послать, и отловить хэндл окна просмотра исходного кода, и опять мессиджи послать, и текст выгрести... 
Но я не верю, что через DOM или объектную модель эту инфу извлечь невозможно! Я просто не понимаю...
Да и DOM в объекте WebBrowser урезанный какой-то!
WebBrowser.Document.all.frames(i).name возвращает, а...
WebBrowser.Document.all.frames(i).innerHtml - кричит, что неподдерживаемое свойство! Чоза? 

Это сообщение отредактировал(а) AlexChuntonov - 14.3.2008, 15:33
PM MAIL   Вверх
Naghual
Дата 14.3.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Так у Вас, батенька, нет понимания алгоритма того что Вы же сами и делаете. Читайте основы.
Вот как примерно должно быть:
Код

Dim db, tbl, sql, tmp_url

Private Sub Command1_Click()
    Set db = CreateObject("ADODB.Connection")
    Set tbl = CreateObject("ADODB.RecordSet")
    db.Open ("base")
    sql = "select * from table where tmp = False"
    tbl.Open sql, db, 3, 1
    tbl.MoveFirst
    id.Text = tbl!n
    WebBrowser1.Navigate tbl!url
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, url As Variant)
    MsgBox WebBrowser1.Document.body.innerText
    If Not tbl.EOF Then
        tbl.MoveNext
        id.Text = tbl!n
        WebBrowser1.Navigate tbl!url
    Else
        tbl.Close
        Set tbl = Nothing
        db.Close
        Set db = Nothing
    End If
End Sub


AlexChuntonov, пожалуйста, создайте отдельную тему.

Это сообщение отредактировал(а) Naghual - 14.3.2008, 15:31


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 14.3.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



Да, спасибо большое за поправку.
Но в данном виде код с моими урлами не работает. Такое ощущение, что
Код

MsgBox WebBrowser1.Document.body.innerText

срабатывает раньше, чем страница полностью загружена. 
Я сделал отдельную кнопку с этим событием, загрузил в браузер один из своих урлов, дождался загрузки. Нажал на кнопку и получит нужный текст.
Почитал, что есть события Busy и State. Busy не советуют, а вот как пользоваться State - я найти не могу.

С уважением, Сергей.
PM MAIL   Вверх
Naghual
Дата 14.3.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



В ошибках рождается истина!

Проконтролруйте, не срабатывает ли событие DocumentComplete несколько раз для одного УРЛа. Если да - продебагте все состояния State и Busy для выяснения закономерности.

Вариантов масса - пробуйте.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 14.3.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



Цитата

не срабатывает ли событие DocumentComplete несколько раз для одного УРЛа

Думаю, что нет. Сообщение выдается один раз на один урл. Просто контент страницы, как я говорил, сожержит яву-скрипт, который в свою очередь грузит доп.контент (с другого сайта). Поэтому, может, скачав вель локальный контент и происходит событие WebBrowser1_DocumentComplete ? А вот как дождаться, пока вся страница будет загружена ?
Ставил следующий код в WebBrowser1_DocumentComplete:
Код

Do While Len(WebBrowser1.Document.body.innerText) < 10

Loop

Ходит по этому циклу непереставая  smile 

С уважением, Сергей.
PM MAIL   Вверх
Naghual
Дата 14.3.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



УРЛ в студию!


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 14.3.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



Урл в личку ушел.
PM MAIL   Вверх
Naghual
Дата 14.3.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Ок. Я посмотрел на него.
Вопрос:  Какой текст вы хотите получить с этой страницы, если там НЕТ текста!  Все формируется динамической графикой.

Это сообщение отредактировал(а) Naghual - 14.3.2008, 18:39


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Naghual
Дата 14.3.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



Я думаю над вашим вопросом...

Добавлено через 14 минут и 51 секунду
Вот что придумалось на текущий момент:
Код

Dim PercentageOK As Boolean


Private Sub Command1_Click()
    WebBrowser1.Navigate2 Trim$(Text1.Text)
    PercentageOK = False
End Sub

Private Sub WebBrowser1_DownloadComplete()
    If PercentageOK = True Then
        Text2.Text = WebBrowser1.Document.body.innerText
    End If
End Sub

Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
    If Progress >= ProgressMax Then
        PercentageOK = True
    End If
End Sub



Пробуйте, пишите.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
svch
Дата 17.3.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



В общем пляски с бубнами и помощь участников форума привела меня вот к чему:
в Нете я нашел события, которые есть у компонента WebBrowser, прописал их в код и смотрел, какое событие за каким срабатывает. У меня получилось, что всегда на последнем месте WebBrowser1_CommandStateChange, на него я свой обработчик и поставил. Событие срабатывает несколько раз за навигацию, поэтому надо еще отловить WebBrowser1_DownloadComplete (возможно, это мой частный случай)

Код

Private Sub WebBrowser1_DownloadComplete()
    Debug.Print "DownloadComplete " & Now
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Debug.Print "DocumentComplete " & Now
End Sub

Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
    Debug.Print "ProgressChange " & Now
End Sub

Private Sub WebBrowser1_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)
    Debug.Print "NewWindow " & Now
End Sub

Private Sub WebBrowser1_PropertyChange(ByVal szProperty As String)
    Debug.Print "PropertyChange " & Now
End Sub

Private Sub WebBrowser1_Quit(Cancel As Boolean)
    Debug.Print "Quit " & Now
End Sub

Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)
    Debug.Print "StatusTextChange " & Now
End Sub

Private Sub WebBrowser1_TitleChange(ByVal Text As String)
    Debug.Print "TitleChange " & Now
End Sub

Private Sub WebBrowser1_BeforeNavigate(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Cancel As Boolean)
    Debug.Print "beforeNavigation " & Now
End Sub

Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
    Debug.Print "CommandStateChange " & Now
    'вот тут у меня обработчик
End Sub

Private Sub WebBrowser1_DownloadBegin()
    Debug.Print "DownloadBegin " & Now
End Sub

Private Sub WebBrowser1_NavigateComplete(ByVal URL As String)
    Debug.Print "NavigateComplete " & Now
End Sub

Private Sub WebBrowser1_FrameBeforeNavigate(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Cancel As Boolean)
    Debug.Print "FrameBeforeNavigate " & Now
End Sub

Private Sub WebBrowser1_FrameNavigateComplete(ByVal URL As String)
    Debug.Print "FrameNavigateComplete " & Now
End Sub

Private Sub WebBrowser1_FrameNewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)
    Debug.Print "FrameNewWindow " & Now
End Sub


С уважением, Сергей.
PM MAIL   Вверх
svch
Дата 17.3.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 10.4.2006

Репутация: нет
Всего: нет



Появился еще трабл :(
При загрузке проги, переход по урлам нормальный и быстрый. Но после 5-10 урлов начинаются тормоза, которые только увеличиваются. Что нужно сделать с браузером, чтоб этого не происходило ? Память как-то очистить или еще что ?

Большое спасибо.
С уважением, Сергей.
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.