Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
1

Парсинг файлов в цикле, обращение на каждом проходе к Awesomium

30.08.2016, 16:14. Просмотров 1163. Ответов 32

Если обрабатываю один файл, то все успешно идет, то есть текст вставляю в браузер Awesomium. Вытаскиваю код и обрабатываю как мне нужно.
Когда идет цикл обработки файлов в Awesomium, работа с браузером должна быть также в каждом проходе.
Однако некоторые файлы не обрабатываются, т.к. цикл видимо не дожидается Awesomium, а идет своим ходом.

Думаю, нужно сделать ожидание в цикле для каждого прохода, пока закончится обработка в Awesomium.
В цикле паузы не помогают с разным значением брал: Threading.Thread.Sleep(5000)

Отлавливание события:
vb.net
1
2
3
4
5
6
Private Sub WebControl1_LoadingFrameComplete(sender As Object, e As FrameEventArgs) Handles WebControl1.LoadingFrameComplete
        If e.IsMainFrame Then
            ' Обработка здесь .................
 
        End If
End Sub
В цикле прописано:
vb.net
1
2
3
                While WebControl1.IsLoading
                    Application.DoEvents()
                End While
Обработку перемещал в цикл, тот же самый результат. Необходимо как-то циклу дождаться, когда загрузится вся страница и обработка выполнится полностью.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2016, 16:14
Ответы с готовыми решениями:

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

Get и Post запрос в цикле - парсинг 1000 страниц
В интернете очень много примеров на тематику Post и Get запросов, но все...

При каждом проходе брекпойнта функция клика дублируется
Подскажите, почему у меня при каждом проходе брекпойнта <1070px событе клика...

Реализовать сортировку выбором с выводом максимов на каждом проходе
{вырезано} решите пожалуйста, очень прошу, сейчас нужно до утра сдать, очень...

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

32
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
09.09.2016, 13:54  [ТС] 21
Все отлично работает, только пройдя несколько десятков проходов (примерно 30-40 итераций), останавливается процесс. Все бы нечего только обрабатывать нужно сотни файлов. Изменял Net Framework с 4.0 ... 6.1 не помогло, Awesomium последней версии 1.7.5.1.
Пишет ошибку:
Исключение типа "System.FormatException" возникло в mscorlib.dll, но не было обработано в коде пользователя
Дополнительные сведения: Строка не распознана как действительное логическое значение.
Ругается на строку:
vb.net
1
If Boolean.Parse(WebControl1.ExecuteJavascriptWithResult("!document.querySelector('h3')")) Then
Я так понимаю в коде нет ошибок, может быть как-то протолкнуть нужно браузер.

Добавлено через 9 минут
Убирал обработанные файлы из папки и вновь начинал обработку. На файлах где была остановка ранее, все обрабатывается уже нет задержки, проблема не в моих файлах. Я вначале из html файлов удаляю все теги и браузеру даю только обычный текст.
0
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
09.09.2016, 14:19 22
Egor2014, а какую строку выражение возвращает, когда вылетает ошибка?
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
09.09.2016, 14:22  [ТС] 23
А где это посмотреть, скажите гляну... Картинку еще прикрепляю посмотрите.
0
Миниатюры
Парсинг файлов в цикле, обращение на каждом проходе к Awesomium  
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
09.09.2016, 15:00 24
Цитата Сообщение от Egor2014 Посмотреть сообщение
А где это посмотреть
Во время отладки, на этой самой строке, проверь значение, которое возвращает выражение WebControl1.ExecuteJavascriptWithResult("!document.querySelector('h3')"). Его надо выделить и в контекстном меню есть пункт Быстрая проверка..., с помощью которого можно вычислить его значение.
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
09.09.2016, 15:11  [ТС] 25
Parse error BC30451: "Parse" не объявлена. Возможно, она недоступна из-за своего уровня защиты.
0
Миниатюры
Парсинг файлов в цикле, обращение на каждом проходе к Awesomium  
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
09.09.2016, 15:14 26
Цитата Сообщение от Egor2014 Посмотреть сообщение
"Parse" не объявлена.
Там Parse и не должно быть. Я же написал
Цитата Сообщение от diadiavova Посмотреть сообщение
Его надо выделить
То есть выделить надо выражение
Цитата Сообщение от diadiavova Посмотреть сообщение
WebControl1.ExecuteJavascriptWithResult("!document.querySelector('h3')")
Вот именно это надо выделить и вычислить значение.
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
09.09.2016, 15:21  [ТС] 27
2 картинки когда жму пересчитать, то результат на 2 картинке.

Выделяю точно как вы сказали, только в строке Выражения почему-то не все показывает.
0
Миниатюры
Парсинг файлов в цикле, обращение на каждом проходе к Awesomium   Парсинг файлов в цикле, обращение на каждом проходе к Awesomium  
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
09.09.2016, 15:39 28
Странно, конечно, что работает-работает, а потом такое. Обычно undefined вылетает в JavaScript при попытке вызывать несуществующий у объекта метод или свойство. В данном случае непонятно, что воспринимается как несуществующий член. querySelector что ли? Тут надо смотреть, что с документом, когда такое вылетает. Думаю, это будет непросто. Но, если нужно простое решение, то можно попробовать следующее:
Удалять текст из очереди не после вставки его в страницу, а только после того, как будет извлечена и сохранена статистика. Все, что содержится в DocumentReady обернуть в блок Try...Catch и выполнять все в блоке Try, а в Catch просто переходить на страничку заново. Тогда, если будет какой-то сбой, можно будет перезапустить процесс без потери данных.
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
09.09.2016, 17:34  [ТС] 29
Текст из очереди удаляется в конце. Интересует как правильно написать исключение ошибки в Try написал так:
vb.net
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
Try 
                   '...........................
                        '   Переходим по метке если нет ключевых фраз
                        GoTo m1
                   '...........................
                   '---------------------------------------------------------
                    '       Сохраняем файл на диск 
                    '---------------------------------------------------------
                    СохранитьToolStripMenuItem_Click(sender, e)
 
                    '   Удаления элемента из очереди
m1:                 qMyQueue.Dequeue()
                    If qMyQueue.Peek() <> "" Then
                    '   Возвращаемся в начало 
                        АнализИзОчередиToolStripMenuItem_Click(sender, e)
                    End If
                End If
            End If
 
        Catch ex As System.FormatException 
            '   Возвращаемся в начало 
            АнализИзОчередиToolStripMenuItem_Click(sender, e)
        Catch ex As Exception
            StatusLabel1.Text = "Конец очереди"
        End Try
    End Sub
Здесь прописал: Catch ex As System.FormatException правильно ли так будет? У меня же выдавало исключение: System.FormatException
0
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
10.09.2016, 00:57 30
Можно обойтись простым эксепшном, разные типы исключений обычно используются тогда, когда для них требуется разная обработка.
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
12.09.2016, 14:08  [ТС] 31
diadiavova, я так и сделал:
vb.net
1
2
3
        Catch ex As Exception
            '   Обновляем страницу
            WebControl1.Source = New Uri("OLD_URL")
Но все равно процесс спотыкается. Но на некотором проходе при обработке, например 100 файлов, у браузера всё окно превращается в серый фон, а иногда как положено страница загружена, но текст не вставляется. И помогает нажатие кнопки (1-2 нажатия, чаще 1), чтоб продолжить процесс, на которую я просто повесил код:
vb.net
1
 WebControl1.Source = New Uri("OLD_URL")
Как-то можно это вылечить в коде, без нажатия кнопки?
0
diadiavova
3767 / 1322 / 414
Регистрация: 11.04.2015
Сообщений: 2,463
Записей в блоге: 35
13.09.2016, 11:33 32
Цитата Сообщение от Egor2014 Посмотреть сообщение
Как-то можно это вылечить в коде, без нажатия кнопки?
Честно говоря, я с этой проблемой не сталкивался, так что вряд ли смогу помочь.
0
Egor2014
29 / 8 / 2
Регистрация: 22.10.2013
Сообщений: 375
13.09.2016, 12:24  [ТС] 33
Может быть как вариант поставить таймер, запускать его в начале прохода, после сохранения статистики проверять секундомер, и если больше минуты то подсунуть: New Uri
0
13.09.2016, 12:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2016, 12:24

обращение к RecordSet в цикле for
здраствуйте. у меня вопрос... пытаюсь обратится к RecordSet следующим...

Обращение к TextBox-ам в цикле
Есть 10 TextBox-oв. Можно ли не прописывать все 10 боксов, а к примеру так,...

Обращение к объектам в цикле
Помогите с данным кодом - цель чтобы при наведении курсора на объект выдавала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru