Проверка страниц в цикле через WebBrowser1

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Egor2014
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 25.10.2013 (Пт) 13:54
Откуда: Ижевск

Проверка страниц в цикле через WebBrowser1

Сообщение Egor2014 » 26.11.2013 (Вт) 21:53

Загружаю известные URL страницы в цикле через WebBrowser1, если страница не доступна по каким-то причинам, то цикл подвисает, как сделать чтоб не проверять данный адрес, а начать проверять другой адрес этим же WebBrowser1.
Код: Выделить всё
' Загружаем страницу партнёра

        Me.WebBrowser1.Navigate(URL)
        ' Ждем когда загрузится страница в WebBrowser
        Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            System.Windows.Forms.Application.DoEvents()
        Loop


    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim d = From x As HtmlElement In Me.WebBrowser1.Document.Links Select New Data With {.Text = x.InnerText, .URL = x.DomElement.href}
    End Sub

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Проверка страниц в цикле через WebBrowser1

Сообщение insite2012 » 26.11.2013 (Вт) 22:17

А если внутрь цикла поставить переменную-счетчик числа попыток загрузки данного URL, увеличивать ее на единицу и выход из цикла по какому-то числу попыток?
Что-то типа
Код: Выделить всё
Do Until......
.........
Counter +=1
If Counter=... Then
Exit Do
Loop
Последний раз редактировалось insite2012 26.11.2013 (Вт) 22:21, всего редактировалось 1 раз.
Dulce et decorum est pro patria mori

Egor2014
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 25.10.2013 (Пт) 13:54
Откуда: Ижевск

Re: Проверка страниц в цикле через WebBrowser1

Сообщение Egor2014 » 26.11.2013 (Вт) 22:21

Интересно а сколько попыток WebBrowser1 делает например за 10 секунд и как это отследить?
Лучше по таймеру выход как-то делать.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Проверка страниц в цикле через WebBrowser1

Сообщение insite2012 » 26.11.2013 (Вт) 22:26

Egor2014 писал(а):Интересно а сколько попыток WebBrowser1 делает например за 10 секунд и как это отследить?

Этого не подскажу.
Еще один вариант-организовать таймер с определенным временем выполнения и завершение попыток подключения по таймеру. Но через счетчик проще, думаю...
Или по счетчику, а внутрь цикла вставить задержку через Thread.Sleep(...)
Dulce et decorum est pro patria mori

Egor2014
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 25.10.2013 (Пт) 13:54
Откуда: Ижевск

Re: Проверка страниц в цикле через WebBrowser1

Сообщение Egor2014 » 27.11.2013 (Ср) 0:19

Пока сделал для одиночного URL. В свойствах таймера 1 секунда Interval=1000
Код: Выделить всё
   Dim timeLinks As String

' Ждем когда загрузится страница в WebBrowser
        Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            System.Windows.Forms.Application.DoEvents()
            StatusLabel1.Text = timeLinks + " " + "Грузим страницу: " + CellStroka
            If timeLiks = 15 Then
                StatusLabel1.Text = "Не смогли загрузить страницу за " + timeLinks + " секунд."
                Exit Sub
            End If
        Loop

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        timeLinks = timeLinks + 1
    End Sub
Последний раз редактировалось Egor2014 27.11.2013 (Ср) 8:17, всего редактировалось 1 раз.

insite2012
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 22.03.2013 (Пт) 8:06
Откуда: Россия, Саратов

Re: Проверка страниц в цикле через WebBrowser1

Сообщение insite2012 » 27.11.2013 (Ср) 2:33

А зачем так? Не лучше ли
Код: Выделить всё
Dim timeLinks As Integer

' Ждем когда загрузится страница в WebBrowser
        Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
            System.Windows.Forms.Application.DoEvents()
            StatusLabel1.Text = timeLinks.ToString  &   " Грузим страницу: "  &  CellStroka
            If timeLiks = 15 Then
                StatusLabel1.Text = "Не смогли загрузить страницу за " &  timeLinks.ToString  & " секунд."
                Exit Sub
            End If
        Loop

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        timeLinks  +=1
    End Sub
Dulce et decorum est pro patria mori

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.11.2013 (Ср) 14:20

Если не ошибаюсь, там есть собтие ошибки... Правда, его тоже ждать придётся.
Egor2014, а что опять не так с тем кодом, который WebBrowser не использует?

Egor2014
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 25.10.2013 (Пт) 13:54
Откуда: Ижевск

Re: Проверка страниц в цикле через WebBrowser1

Сообщение Egor2014 » 27.11.2013 (Ср) 15:01

Qwertiy писал(а):Если не ошибаюсь, там есть событие ошибки

Ecли Вы про этот код, то уже стоит в свойствах: WebBrowser1.ScriptErrorsSuppressed = True
Qwertiy писал(а):а что опять не так с тем кодом, который WebBrowser не использует?

Сам удивляюсь 1 ссылка стоит хорошо, а WebBrowser её не хотит брать.
В личку скину адрес.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.11.2013 (Ср) 15:11

Я про код из предыдущей темы. Что с ним опять не так, что ты используешь WebBrowser?

Egor2014 писал(а):WebBrowser1.ScriptErrorsSuppressed = True

Нет, не про это. Но того что я имел в виду у WebBrowser'а, похоже, нет...

Egor2014
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 25.10.2013 (Пт) 13:54
Откуда: Ижевск

Re: Проверка страниц в цикле через WebBrowser1

Сообщение Egor2014 » 27.11.2013 (Ср) 15:40

Я там не смог допилить WebUtility, но к нему вернусь скоро.
Мне понравился работа с WebBrowser анкоры легко распознаёт, сам с кодировкой разбирается. Нашел иностранный пример
Private Sub cmdExtract_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExtract.Click
Me.wb.Navigate(Me.txtUrl.Text)
End Sub

Private Sub wb_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wb.DocumentCompleted
Dim d = From x As HtmlElement In Me.wb.Document.Links Select New Data With {.Text = x.InnerText, .URL = x.DomElement.href}
Me.GridView.DataSource = d.ToList
End Sub


Однако медленнее работает, чем WebClient

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.11.2013 (Ср) 15:44

Egor2014 писал(а):Я там не смог допилить WebUtility, но к нему вернусь скоро.

Ну так и разберись, как допилить.
Зачем писать непонятно что вместо этого? Всё ж уже написано там.


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: Yandex-бот и гости: 11

    TopList