Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152

Поиск значения в html странице

27.09.2013, 09:12. Показов 2750. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые!
Учу C#. Знаю его только на полкнижки

Я уже облазил форум по своей проблеме. Не писал бы если бы что то получилось... Прошу помощи.
Смысл задачи - вытащить значение из МФУ по количеству распечатанных страниц. У МФУ я не нашел ни какого опросного протокола по этому информацию приходится вытягивать через Web-морду http://192.168.9.22. Я нашел адрес страницы где находиться нужное число http://192.168.9.22/start/StatCntFunc.htm.
Есть два пути:
1. скачать страницу, сохранить на диске и работать как с текстовым файлом.
C#
1
2
3
WebClient wc23 = new WebClient();
            Uri ui23 = new Uri("http://192.168.9.23/start/StatCntFunc.htm");
            wc23.DownloadFile(ui23, "d://23.txt");
2. Осуществлять поиск напрямую на web-странице.

Вот собственно часть кода страницы с которой нужно вытащить значение:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//sLabel[0] = GlobalNav[4];sData[0] = "";
//sLabel[1] = GlobalNav[2];sData[1] = "0";
//sLabel[2] = GlobalNav[5];sData[2] = "";
//sLabel[3] = Usage[0];sData[3] = "0";
 
sLabel[0] = GlobalNav[4];sData[0] = "696";
sLabel[1] = GlobalNav[2];sData[1] = "20914";
if(parent.FaxSupport == 1)
{
sLabel[2] = NavFax[13];sData[2] = "0";
sLabel[3] = Usage[0];sData[3] = "21610";
}
else
{
sLabel[2]= Usage[0];sData[2] = "21610";
}
Нужна вот эта строчка
HTML5
1
sLabel[2]= Usage[0];sData[2] = "21610";
из нее значение в кавычках - "21610"

значение sLabel[2]= Usage[0];sData[2] = " - уникально на странице, по нему можно искать. Но я не сообразил как...
Строчка со значением имеет номер строки 131 в каждой странице - то есть по номеру тоже можно осуществлять поиск.
Пожалуйста, помогите.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2013, 09:12
Ответы с готовыми решениями:

Поиск текста по html странице
Добрый день, комрадс. Недавно ради интереса решил сделать себе простенький парсер нужных мне слов на веб-страничке. И столкнулся с...

Поиск русских слов на html странице
Пока делаю поиск на html сранице между буржуйскими символами, все работает хорошо, но как только поподаеться русская буква, результата ни...

Нажать кнопку на HTML странице
А кто может помочь в решении следующей задачи. Дано: Прога (C#), считывающая HTML страницу с некоего сайта Cтраница...

12
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
27.09.2013, 11:45
Пишу на скорую руку, т.к. опаздываю. Если у вас стандартная строка, то примерно так (пишу на память, могу с синтаксисом ошибиться):
C#
1
2
3
4
5
String fullText=...;//тут запихиваем все содержимое
String str="sLabel[2]= Usage[0];sData[2] = \"";
int start=fullText.IndexOf(str)+str.length;
int end=fullText(start+1,"\"");
String res=fullText.SubString(start,end);//тут должно быть ваше значение
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
27.09.2013, 12:18
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using org.mozilla.javascript;
using org.mozilla.javascript.ast;
using System;
using System.Collections.Generic;
 
namespace Ghost
{
    public class FindPages : NodeVisitor
    {
        List<string> pages;
 
        public FindPages()
        {
            this.pages = new List<string>();
        }
 
        public bool visit(AstNode an)
        {
            if (an is Name && an.toSource() == "sData")
            {
                Assignment assignment = (Assignment)an.getParent().getParent();
                StringLiteral page = (StringLiteral)assignment.getRight();
                this.pages.Add(page.getValue());
                return false;
            }
            if (an is IfStatement)
                return false;
            return true;
        }
 
        public List<string> Pages
        {
            get
            {
                return this.pages;
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            string script =
@"//sLabel[0] = GlobalNav[4];sData[0] = """";
//sLabel[1] = GlobalNav[2];sData[1] = ""0"";
//sLabel[2] = GlobalNav[5];sData[2] = """";
//sLabel[3] = Usage[0];sData[3] = ""0"";
 
sLabel[0] = GlobalNav[4];sData[0] = ""696"";
sLabel[1] = GlobalNav[2];sData[1] = ""20914"";
if(parent.FaxSupport == 1)
{
sLabel[2] = NavFax[13];sData[2] = ""0"";
sLabel[3] = Usage[0];sData[3] = ""21610"";
}
else
{
sLabel[2]= Usage[0];sData[2] = ""21610"";
}";
            Parser parser = new Parser();
            AstRoot root = parser.parse(script, null, 1);
            FindPages visitor = new FindPages();
            root.visitAll(visitor);
            foreach (string page in visitor.Pages)
                Console.WriteLine("Pages: {0}", page);
            Console.ReadLine();
        }
    }
}
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
27.09.2013, 13:50  [ТС]
Цитата Сообщение от titans2011 Посмотреть сообщение
Пишу на скорую руку, т.к. опаздываю. Если у вас стандартная строка, то примерно так (пишу на память, могу с синтаксисом ошибиться):
C#
1
2
3
4
5
String fullText=...;//тут запихиваем все содержимое
String str="sLabel[2]= Usage[0];sData[2] = \"";
int start=fullText.IndexOf(str)+str.length;
int end=fullText(start+1,"\"");
String res=fullText.SubString(start,end);//тут должно быть ваше значение
Я наверно не так сформулировал вопрос...
"Запихивать" текст каждый раз... это долго, тем более что обрабатываемых страниц будет много, около 50.
Я уже сохранил HTM страницу и обозвал ее 22.txt. Этот файл имеет текст. По тексту нужно найти и скопировать значение. Файлов будет много. Просто каждый нужно прописать один раз. И над каждым производить поиск.
В файле известна строка(она одинакова во всех файлах кроме самого значения) в которой искомое значение и ее номер(131).

Добавлено через 7 минут
Цитата Сообщение от Петррр Посмотреть сообщение
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using org.mozilla.javascript;
using org.mozilla.javascript.ast;
using System;
using System.Collections.Generic;
 
namespace Ghost
{
    public class FindPages : NodeVisitor
    {
        List<string> pages;
 
        public FindPages()
        {
            this.pages = new List<string>();
        }
 
        public bool visit(AstNode an)
        {
            if (an is Name && an.toSource() == "sData")
            {
                Assignment assignment = (Assignment)an.getParent().getParent();
                StringLiteral page = (StringLiteral)assignment.getRight();
                this.pages.Add(page.getValue());
                return false;
            }
            if (an is IfStatement)
                return false;
            return true;
        }
 
        public List<string> Pages
        {
            get
            {
                return this.pages;
            }
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            string script =
@"//sLabel[0] = GlobalNav[4];sData[0] = """";
//sLabel[1] = GlobalNav[2];sData[1] = ""0"";
//sLabel[2] = GlobalNav[5];sData[2] = """";
//sLabel[3] = Usage[0];sData[3] = ""0"";
 
sLabel[0] = GlobalNav[4];sData[0] = ""696"";
sLabel[1] = GlobalNav[2];sData[1] = ""20914"";
if(parent.FaxSupport == 1)
{
sLabel[2] = NavFax[13];sData[2] = ""0"";
sLabel[3] = Usage[0];sData[3] = ""21610"";
}
else
{
sLabel[2]= Usage[0];sData[2] = ""21610"";
}";
            Parser parser = new Parser();
            AstRoot root = parser.parse(script, null, 1);
            FindPages visitor = new FindPages();
            root.visitAll(visitor);
            foreach (string page in visitor.Pages)
                Console.WriteLine("Pages: {0}", page);
            Console.ReadLine();
        }
    }
}
Мало что понял из вашего кода Но ясно, что происходит поиск из заданного текста... Нужно поиск из файла с заранее известным текстом. В файле будет меняться только искомая величина.
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
27.09.2013, 13:50
ну так что мешает загрузить 50 файлов и пропарсить кодом который я написал?
Вы никак не прочтете значение из файла предварительно не загрузив его.
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
27.09.2013, 14:01  [ТС]
Цитата Сообщение от titans2011 Посмотреть сообщение
ну так что мешает загрузить 50 файлов и пропарсить кодом который я написал?
Вы никак не прочтете значение из файла предварительно не загрузив его.
Мешает незнание того как это делать в файле а не просто с заданной строкой
C#
1
2
string path = @"d:\22.txt";
string s = File.ReadAllText(path);
так пробовал - не ищет по всем строкам...
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
27.09.2013, 23:11
Потому что проблема в пути. Сначала попробуйте загрузить файл так:
C#
1
2
3
4
5
string path = @"d:\\22.txt";
System.IO.StreamReader myFile =
   new System.IO.StreamReader(path);
string myString = myFile.ReadToEnd();
myFile.Close();
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
28.09.2013, 09:37  [ТС]
Цитата Сообщение от titans2011 Посмотреть сообщение
Потому что проблема в пути. Сначала попробуйте загрузить файл так:
C#
1
2
3
4
5
string path = @"d:\\22.txt";
System.IO.StreamReader myFile =
   new System.IO.StreamReader(path);
string myString = myFile.ReadToEnd();
myFile.Close();
Че та я совсем запутался...

C#
1
2
3
4
5
6
7
8
9
            string path = @"d:\\22.txt";
            System.IO.StreamReader myFile = new System.IO.StreamReader(path);
            string myString = myFile.ReadToEnd();
            // String fullText=...;//тут запихиваем все содержимое
            String str="sLabel[2]= Usage[0];sData[2] = \"";
            int start=fullText.IndexOf(str)+str.length;
            int end=fullText(start+1,"\"");
            String res=fullText.SubString(start,end);//тут должно быть ваше значение
            myFile.Close();
Чем fullText заменить? И в какой переменной сохраниться искомое значение?
0
 Аватар для opv88
0 / 0 / 1
Регистрация: 28.09.2013
Сообщений: 35
28.09.2013, 16:59
Не нужно тут городить костылей. Не надо никаких файлов тянуть на клиента в данном случае. Просто воспользуйтесь HttpWebRequest, который может тянуть данные со страницы в Stream. После чего обрабатывать полученную строку.
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
28.09.2013, 19:37
C#
1
2
3
4
5
6
7
8
string path = @"d:\\22.txt";
            System.IO.StreamReader myFile = new System.IO.StreamReader(path);
            string fullText = myFile.ReadToEnd();//тут запихиваем все содержимое
            String str="sLabel[2]= Usage[0];sData[2] = \"";
            int start=fullText.IndexOf(str)+str.length;
            int end=fullText(start+1,"\"");
            String res=fullText.SubString(start,end);//тут должно быть ваше значение
            myFile.Close();
0
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
28.09.2013, 19:41  [ТС]
Цитата Сообщение от titans2011 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
string path = @"d:\\22.txt";
            System.IO.StreamReader myFile = new System.IO.StreamReader(path);
            string fullText = myFile.ReadToEnd();//тут запихиваем все содержимое
            String str="sLabel[2]= Usage[0];sData[2] = \"";
            int start=fullText.IndexOf(str)+str.length;
            int end=fullText(start+1,"\"");
            String res=fullText.SubString(start,end);//тут должно быть ваше значение
            myFile.Close();
Я так и делал, я не могу справиться вот с этим - "Ошибка 2 "fullText" является "переменная", но используется как "метод""
0
320 / 280 / 109
Регистрация: 27.09.2010
Сообщений: 1,058
28.09.2013, 20:52
А, так потому что на память писал. Вот проверенный код:
C#
1
2
3
4
5
            string fullText = myFile.ReadToEnd();
            String str = "sLabel[2]= Usage[0];sData[2] = \"";
            int start = fullText.IndexOf(str) + str.Length;
            int end = fullText.IndexOf( "\"",start + 1);
            String res = fullText.Substring(start, end-start);//тут должно быть ваше значение
1
2 / 2 / 1
Регистрация: 15.08.2013
Сообщений: 152
28.09.2013, 21:03  [ТС]
Цитата Сообщение от titans2011 Посмотреть сообщение
А, так потому что на память писал. Вот проверенный код:
C#
1
2
3
4
5
            string fullText = myFile.ReadToEnd();
            String str = "sLabel[2]= Usage[0];sData[2] = \"";
            int start = fullText.IndexOf(str) + str.Length;
            int end = fullText.IndexOf( "\"",start + 1);
            String res = fullText.Substring(start, end-start);//тут должно быть ваше значение
Большое спасибо!!! Работает!
Про start и end понятно. Но вот с Substring что происходит не совсем понимаю... Как то фигово я с парсингом...
На всякий случай выкладываю для таких же лапухов как я полный текст поиска

C#
1
2
3
4
5
6
7
8
9
  string path = @"d:\\22.txt";
            System.IO.StreamReader myFile = new System.IO.StreamReader(path);
            string fullText = myFile.ReadToEnd();
            String str = "sLabel[2]= Usage[0];sData[2] = \"";
            int start = fullText.IndexOf(str) + str.Length;
            int end = fullText.IndexOf("\"", start + 1);
            String res = fullText.Substring(start, end - start);
            Console.WriteLine(res);
            Console.ReadKey();
Еще раз спасибо всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2013, 21:03
Помогаю со студенческими работами здесь

Код C# представить в html-странице с сохранением отступов и подсветкой синтаксиса
На входе: текст на C#. На выходе: Файл HTML, в котором сохранены концы строк и пробелы, а ключевые слова, символьные и числовые константы...

Замена html в странице полученой через Webbrowser без потери функциональности
Выбился из сил, столько бреда уже прочитал, но ответа так и не нашел. WinForm приложение на форме только элемент Webbrowser c Url...

Поиск данных на странице через Selenium
Добрый день. Недавно начал работать с Selenium WebDriwer, остановился на данной проблеме: Имеется список пользователей к примеру в...

Поиск куска кода в странице (Регулярные выражение)
Всем привет . Пишу некий парсер групп в вк , с кровью и потом я сделал авторизацию . Так же сделал некое подобие поиска по запросу ...

Поиск по html странице
Всем привет! Хочу сделать поиск по странице, в инете ни чего нету, собрал по кускам, всё хорошо работает, вот только он почему то не ищет...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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