Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
12 / 12 / 0
Регистрация: 25.02.2012
Сообщений: 71

Как распарсить строку, полученную из webBrowser

25.02.2012, 03:10. Показов 2364. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Уважаемые программисты помогите в вопросе.

есть у меня webbrowser и richtextbox и строка вот такого вида
Code
1
<div id='[B]ad_1062_2[/B]' style='padding:5px; background:white; cursor:pointer;' onclick='openad("[B]20120224ac06a25a61fe4c8531abfaef154b1c1e[/B]");'>
таких строк немерено отличаются они только тем что выделено жирным

Задача. Программно переходить все ссылки
пишу так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            HtmlElementCollection hec4 = webBrowser1.Document.GetElementsByTagName("div");
 
            foreach (HtmlElement he4 in hec4)
            {
                if ((he4.GetAttribute("onclick") == "'openad("))
                {
                                     
                        function_find(@"onclick='openad(", 41);
                        txb_Temp.Text = txb_Temp.Text.Replace("onclick='openad(\"", "");
                        webBrowser2.Navigate("http://www.xxxxxxxxxx.com/pages/clickadsproc?h=" + txb_Temp.Text);
                        pause(15000); webBrowser2.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser2_DocumentCompleted);
                        pause22();
                    }
            }
смушает вот это
C#
1
if ((he4.GetAttribute("onclick") == "'openad("))
я просто не знаю как указать правильно.

Или подскажите как вывести по тегу
C#
1
openad
например список в listbox
желательно примером.
нашел вот такой пример
C#
1
2
3
4
5
6
7
8
9
10
 List<string> links = new List<string>();
 
           ;
foreach (HtmlElement link in webBrowser1.Document.Links)
{
string href = link.GetAttribute("onclick");
links.Add(href); //добавляем очередную ссылку в лист
}
 
listBox1.DataSource = links; //отображаем ссылки в ListBox
но как указать GetAttribute непонятно.

в идеале, можно просто вывести список onclick='openad("20120224ac06a25a61fe4c8531abfaef154b1c1e
буду очень признателен.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2012, 03:10
Ответы с готовыми решениями:

Распарсить страничку в webBrowser
Доброго времени всем! Вопрос, есть форма на которой есть webBrowser и левее Label, в webBrowser открывается страничка на которой имеется...

Как распарсить строку JSON и получить оттуда только одно значение?
Сервер возвращает мне длинную JSON строку. Из нее мне нужно вытащить только ID. Я сделал так: public class IDResponse { ...

Как правильно распарсить json строку и какой для этого нужен класс?
Что-то вообще в голову не лезет, как правильно распарсить такую строку и какой для этого нужно написать класс: { &quot;data&quot;:...

8
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
25.02.2012, 05:11
Этот код будет собирать значения этого типа 20120224ac06a25a61fe4c8531abfaef154b1c1e
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            Regex reg = new Regex(@"\w{40}");
            List<string> list = new List<string>();
            HtmlElementCollection hec4 = webBrowser1.Document.GetElementsByTagName("div");
            foreach (HtmlElement he4 in hec4)
            {
                if (he4.GetAttribute("onclick").Contains("'openad("))
                {
                    string k = he4.GetAttribute("onclick");
                    if (reg.IsMatch(k))
                    {
                      list.Add(reg.Match(k).Value);
                    }  
                }
            }
       }
0
12 / 12 / 0
Регистрация: 25.02.2012
Сообщений: 71
25.02.2012, 17:04  [ТС]
к сожалению оно не находит ни 1 совпадения для контейнера. менял на любые другие тоже не находит.
1
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
25.02.2012, 17:21
Тебе в итоге для чего это нужно ?
Просто можно регуляркой элементарно все необходимое вытянуть, в зависимости от того для чего.
0
12 / 12 / 0
Регистрация: 25.02.2012
Сообщений: 71
25.02.2012, 17:37  [ТС]
Итог получить список и пройтись по нему выполняя определенные действия. как его получить неважно. Меня бы и тот вариант устроил, но почему-то он не работает(. Хотя похожие примеры я уже находил, они тоже не пашут
1
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
25.02.2012, 17:39
Цитата Сообщение от Kreol2013 Посмотреть сообщение
к сожалению оно не находит ни 1 совпадения для контейнера. менял на любые другие тоже не находит.
Косячок есть , исправь на вот это
C#
1
if (he4.GetAttribute("onclick").Contains("openad"))
Не все значения атрибутов можно получить через WebBrowser ,может и onclick в их числе
0
12 / 12 / 0
Регистрация: 25.02.2012
Сообщений: 71
25.02.2012, 17:57  [ТС]
Не все значения атрибутов можно получить через WebBrowser ,может и onclick в их числе
скорее всего так и есть(.
могу их получить через поиск в richtextbox но не врубаюсь как сделать перечисление. 1-ю то оно срахзу находит. а как дальше хз.

В связи с "большой грамотностью" пользуюсь вот такой нехорошей функцией, которая частенько при работе сторонней программы с буфером матерится

C#
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
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            this.richTextBox1.Text = webBrowser1.DocumentText;
 
        }
 
 //mystring искомая строка или кусок кода, count - сколько выделить символов после нахождения и выделения строки в richtextbox
 
private void function_find(string mystring, int count)
        {
            txb_Temp.Clear();
            if (richTextBox1.Find(mystring) > 0)
            {
                int my1stPosition = richTextBox1.Find(mystring);
                richTextBox1.SelectionStart = my1stPosition;
 
                richTextBox1.SelectionLength = mystring.Length + count;
                richTextBox1.Select();
 
                try
                {
                    richTextBox1.Copy();
                }
                catch
                {
                    MessageBox.Show("Unable to cut document content.", "RTE - Copy", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true)
                {
                    txb_Temp.Paste();
                    Clipboard.Clear();
                }
 
            }
 
        }
1
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
25.02.2012, 18:02
Лучший вариант парсинга это httpwebrequest -> html agility pack ,при необходимости еще Regex
0
12 / 12 / 0
Регистрация: 25.02.2012
Сообщений: 71
26.02.2012, 00:05  [ТС]
как переписать регулярку? и засунуть ее в listbox
C#
1
2
3
4
5
6
7
8
9
10
11
12
var request = WebRequest.Create("url");
            using (var response = request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                using (var reader = new StreamReader(stream))
                {
                    string data = reader.ReadToEnd();
                    var townExp = new Regex(@"\w{40}");
                    string town = townExp.Match(data).Groups["onclick"].Value; 
                    
                }
            }
а с html agility pack чет тоже не очень получается

C#
1
2
3
4
5
6
7
8
9
10
HtmlWeb web = new HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = web.Load("url");
 
            HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("onclick");
            if (nodes == null)
                return;
            foreach (HtmlNode node in nodes)
            {
                listBox1.Items.Add(node.Attributes["onclick"].Value);
            }
Добавлено через 4 часа 41 минуту
продолжая исследования в области регулярных выражений выяснилось, что они действительно просто колоссально облегчают жизнь.

все проблему решил
для решания был пересоздан с 0 проект из rsdn.ru
и около полу часа ушло на то чтоб правильно получить строку
сама поисковая строка выглядит так
Code
1
openad(\S{40})
а излишки символов убираем так
C#
1
2
3
4
this.Match = Match.Replace("openad(h)","");
this.Match = Match.Replace("openad(\"", "");
this.Match = Match.Replace("\");'>", "");
return Match;
Всем спасибо.
Извините если что не так.

Добавлено через 11 минут
подскажите еще пожалуйста
есть строка
C#
1
string mystring1 = @"/>Строка<span class='green'> (+)";
как ее правильно указать для
C#
1
Regex re = new Regex(@"/>Строка<span class='green'> (+)", RegexOptions.IgnoreCase);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2012, 00:05
Помогаю со студенческими работами здесь

Как собрать строку, имея коллекцию вхождений полученную через Regex.Matches?
Есть коллекция `MatchCollection` с данными о всех найденных вхождениях. string inputStr = &quot;aabbRsssRhRwwwRRyy&quot;; string...

Как распарсить строку
Всем привет! У меня есть строки: &quot;Администратор - Klicke für Details&quot;&gt;Администратор&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt; ...

Как распарсить строку?
Всем привет! У меня есть строка: &lt;div class=&quot;work-info&quot;&gt; &lt;!----&gt; &lt;!----&gt;&lt;div class=&quot;work-description break-text&quot;...

Как распарсить приложенную строку?
Как из ответа такого вида спарсить значение sid ? &lt;script&gt;location.href='location:http://109.234.155.164/powar/game.php?sid=тут циферки...

Как правильно распарсить строку
Решил написать следующую программу, есть string One, в нем текст в такой форме: string One = &quot;{Привет|Здравствуйте|Добрый день}...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru