Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Получить текст открытого блокнота


Автор: Cobalt 12.8.2010, 20:04
Вообщем доброго времени суток всем.
вопрос мне довольно трудно сформулировать, щаз попробую объяснить.
чтобы облегчить свою работу решил написать не большую программу. обдумал некоторые детали. установил c# 2005 express.
суть проблемы:
имеется станица в IE, я нажимаю просмотр кода, открывается блокнот, собственно мне надо получить доступ к коду в блокноте, и далее проделывать с ним операции поиска/копирования и  т.п.

как реализовать
 smile 

Автор: Cheloveck 12.8.2010, 20:27
А почему бы не отправить запрос на сервер и не получить весь код из программы?

Автор: Cobalt 12.8.2010, 20:29
думаю вопрос конечно не новый, но в поиске что-то ниче не нашел

Добавлено через 6 минут и 55 секунд
Цитата(Cheloveck @  12.8.2010,  20:27 Найти цитируемый пост)
А почему бы не отправить запрос на сервер и не получить весь код из программы?

не совсем понял
щаз объясню, сервера нет, есть локальный каталог с инфой, работает причем тока в IE, грузит из базы описание вещи, собственно страница почти не меняется, меняется тока поля в таблице, поэтому возникла идея попробовать автоматизировать процесс копирования оттуда инфы
придумать способ кроме как вытаскивать из блокнота не смог

Автор: Exai1e 12.8.2010, 20:47
Cobalt, "не с той стороны смотрите"
чем не утраивает вариант, например такой:
если я правильно понял задачу
Код

            string path = @"C:\Projects\12345.html"; //путь к файлу
            string[] srcStringItems = File.ReadAllLines(path); //весь текст из файла (тоже самое что и в мозила/ie (исходный код стр) показывает в блокноте)

            foreach (string currentLine in srcStringItems)
                listBox1.Items.Add(currentLine);

p.s. походу не правильно, т.к. что бы выбралась инфа из бд, надо для начала обратиться к странице :-/

тогда можно так, но это если не нужно на странице выбирать параметры товара или еще что (если надо, то можно посылать post запрос с параметрами
Код

            string path = @"C:\Projects\12345.html";
            WebClient client = new WebClient();
            string pageSrc = client.DownloadString(path);
            listBox1.Items.Add(pageSrc);


Автор: Cobalt 12.8.2010, 21:43
Exai1e, 
хм, это я та понимаю для статичного файла
а инфа на странице генериться разная в таблице, т.е. я запустил эту байду, выбрал товар, загрузилась талица с описанием  грубо говоря, из БД.
т.е. насколько я понимаю единственный способ получить код динамически сгенеренной страницы это из блокнота, или хитрым способом обратиться к самому IE и вытащить оттуда (это конечно лучше)
далее ищу в коде нужные мне строки и копирую инфу из них

Автор: Exai1e 12.8.2010, 21:50
Cobalt, да это для статичного файла (изначально не так понял задачу), но думаю можно попробовать отправить post запрос странице (пусть и локальной) с необходимыми данными (например группой товаров, которую нужно выбрать из бд и т.д.)
не уверен что получится, но думаю попробовать стоит, поиск по форуму .net параметром "post" выдает довольно много тем с реализациями, например:
http://forum.vingrad.ru/forum/topic-291628/unread-1.html
http://forum.vingrad.ru/forum/topic-302797/unread-1/kw-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC-post/hl/post/index.html
... etc
зы. честно не сталкивался с такой задачей, но первое что бы попробовал, думаю что это post запросы
зыы. если получение данных из бд реализованно вами, то может стоит "прикрутить" сервис (например WCF, XML), который будет возвращать данные в удобном вам виде, тогда можно будет написать к нему полноценный детсктоп_клиент

Автор: Cobalt 12.8.2010, 22:13
Цитата(Exai1e @  12.8.2010,  21:50 Найти цитируемый пост)
зыы. если получение данных из бд реализованно вами,

нет что Вы, я ваще не программист)) и понятия не имею кто этот каталог делал и как он работает


Цитата(Exai1e @  12.8.2010,  21:50 Найти цитируемый пост)
(пусть и локальной) с необходимыми данными (например группой товаров, которую нужно выбрать из бд и т.д.)

да кто бы знал какой там запрос надо отправить (( к тому же я выбираю товары по списку

суть в чем (это как я придумал),  выбрал товар, создал html-шаблон с нужным именем товара, указал проге файл шаблона, она смотрит в открытый блокнот (или в сам браузер), берет нужные значения из ячеек таблицы, вставляет их в нужные места в шаблон, ну это дело техники, как нить с поиском/вставкой думаю разберусь, шаблон сохраняется, и далее процесс в цикле

задолбался я копировать/вставить нажимать  smile 

Автор: diadiavova 12.8.2010, 22:19
Cobalt, а каким образом страница попадает в ие, и что отображается в адресной строке? Не пробовал запросить страницу по этому адресу?

Добавлено через 4 минуты и 26 секунд
Цитата(Cobalt @  12.8.2010,  23:13 Найти цитируемый пост)
нет что Вы, я ваще не программист))

А в таком случае о каком доступе речь? Я думал о программном.

Автор: Cobalt 12.8.2010, 23:14
Цитата(diadiavova @  12.8.2010,  22:19 Найти цитируемый пост)
А в таком случае о каком доступе речь? Я думал о программном.

имелось ввиду я не работаю им)
хочу просто облегчить себе жизнь

Цитата(diadiavova @  12.8.2010,  22:19 Найти цитируемый пост)
Cobalt, а каким образом страница попадает в ие, и что отображается в адресной строке? Не пробовал запросить страницу по этому адресу?

каталог организован не известным мне способом, для его работы запускается некий экзешник - сервер каталога. может все это на яве работает  smile   далее запускается одна единственная в наличии страница start.html
также имеются базы данных, текстовый в перемешку с хрен знает каким форматом


Автор: Cobalt 13.8.2010, 07:15
Цитата(diadiavova @  12.8.2010,  22:19 Найти цитируемый пост)
и что отображается в адресной строке?

http://localhost:8090/Index/katalog_new/tom_tom10_loca8

собственно чтоб узнать этот адрес нуно же все равно обращаться к IE, как
дело видимо сводится к этому

Автор: diadiavova 13.8.2010, 08:37
Cobalt, в принципе, если нужно простое решение, то можешь сделать так:
Бросаешь на форму WebBrowser, загружаешь страницу в него и дальше действуешь так же, как и с помощью ие, только к странице у тебя будет программный доступ, то есть ты программно сможешь извлекать данные, переходить на другую страницу по ссылке итд. Думаю, в твоем случае этого будет достаточно.

Автор: Cobalt 13.8.2010, 09:38
Цитата(diadiavova @  13.8.2010,  08:37 Найти цитируемый пост)
Cobalt, в принципе, если нужно простое решение, то можешь сделать так:Бросаешь на форму WebBrowser, загружаешь страницу в него и дальше действуешь так же, как и с помощью ие, только к странице у тебя будет программный доступ, то есть ты программно сможешь извлекать данные, переходить на другую страницу по ссылке итд. Думаю, в твоем случае этого будет достаточно.

да, чем проще тем лучше, прога тока для меня

впринципе я пересмотрел решение, работать с WebBrowser думаю будет конечно полегче, наверное там и методы готовые работы с тегами есть
оо, озарение smile 
теперь надо попробывать, будет ли веб браузер кушать страницу эту) а я уже нашел способ получения урл из открытого ИЕ, а дело вроде оказывается проще
приду домой буду пробывать

Автор: diadiavova 13.8.2010, 09:44
Цитата(Cobalt @  13.8.2010,  10:38 Найти цитируемый пост)
теперь надо попробывать, будет ли веб браузер кушать страницу эту

Будет, но сервер все равно запустить придется.
Цитата(Cobalt @  13.8.2010,  10:38 Найти цитируемый пост)
 а я уже нашел способ получения урл из открытого ИЕ

Если ты на нужные страницы переходишь по ссылкам, то урл можно из этих ссылок и извлекать...опять-таки программно.

Автор: Cobalt 14.8.2010, 22:12
в продолжение темы
что-то я обгуглился уже  smile 

хочу получить текст элемента по классу 
вот элемент <td width="133" valign="top" height="100%" align="left" bgcolor="#dfedfe" class="tab_head">Назначение, область применения</td>

хочу перебрать элементы с таким классом, но как я понимаю встроенных средств нет
мож кто поможет?

Автор: wester 14.8.2010, 22:27
Cobalt, 
Цитата

хочу перебрать элементы с таким классом, но как я понимаю встроенных средств нет

как нет ? а регулярные выражения на что ?

Автор: Cobalt 14.8.2010, 23:08
Цитата(wester @  14.8.2010,  22:27 Найти цитируемый пост)
как нет ? а регулярные выражения на что ?

имелось ввиду такое webBrowser1.Document.GetElementsByTagName
а затем применить там сразу InnerText для получения текста 

Автор: gambit 15.8.2010, 00:43
Сейчас скажу весч, которую ни разу не пробовал, возможно это глупость, но почему то это сразу пришло в голову.
html - текст с тегами
xml - текст с тегами
что мешает работать с html как с xml???

Да, понимаю, что все это счастье упадет, так как нет заголовка и root элемента, но с другой стороны, что мешает их подставить?

Автор: diadiavova 15.8.2010, 08:53
Цитата(Cobalt @  14.8.2010,  23:12 Найти цитируемый пост)
хочу получить текст элемента по классу 

Что это значит? Класс в пределах документа не уникален, поэтому неясно, что именно тебе надо: первый элемент с таким значением этого атрибута, первый такой элемент td, первый элемент в некоторой ветке документа или объединенный текст всех элементов этого класса smile 

В принципе, из коллекции элементов, полученной стандартными средствами, можно извлечь то что надо например одной из линк-функций, так например
Код

webbrowser1.Document.All.Where( x => x.GetAttribute("class") == "tab_head");
можно получить коллекцию всех элементов с классом tab_head.

Автор: Cobalt 16.8.2010, 07:48
Цитата(diadiavova @  15.8.2010,  08:53 Найти цитируемый пост)
Что это значит? 

понимаю, несколько криво звучит smile 
хотел сказать что надо получить текст всех ячеек td у которых есть такой вот класс
Цитата(diadiavova @  15.8.2010,  08:53 Найти цитируемый пост)
можно получить коллекцию всех элементов с классом tab_head.

вот именно это и хотел  smile 


Цитата(diadiavova @  15.8.2010,  08:53 Найти цитируемый пост)
одной из линк-функций

это я так понимаю linq?

 
diadiavova, есть еще вопросы по html, мож тему создать отдельную?

Автор: diadiavova 16.8.2010, 08:00
Цитата(Cobalt @  16.8.2010,  08:48 Найти цитируемый пост)
это я так понимаю linq?

 smile 
Цитата(Cobalt @  16.8.2010,  08:48 Найти цитируемый пост)
есть еще вопросы по html, мож тему создать отдельную? 

Да, но в соответствующем разделе smile 

Автор: Cobalt 16.8.2010, 09:02
Цитата(diadiavova @  16.8.2010,  08:00 Найти цитируемый пост)
Да, но в соответствующем разделе  

да я имел ввиду общие вопросы по htmlelement или там по работе webbrowser

ох, пытался я как то давненко с линк разобраться, мозг сломал  smile 

приду домой буду пробывать

Автор: diadiavova 16.8.2010, 09:06
Цитата(Cobalt @  16.8.2010,  10:02 Найти цитируемый пост)
ох, пытался я как то давненко с линк разобраться, мозг сломал

Не так страшен черт, как его малюют. Это все придумали для облегчения жизни, а не наоборот.

Автор: Cobalt 16.8.2010, 19:15
вот же ш блин же ш, с# 2005 express не поддерживает linq что ли ? ((

Добавлено через 9 минут и 6 секунд
а не, подключить я подключил, но что то ругается, не распознает фукцию

Автор: wester 16.8.2010, 19:27
Cobalt, 
что пишешь и как ругается ?

Автор: Cobalt 16.8.2010, 19:45
wester, короче подключить дало тока using System.Data.Linq;

а надо для работы как я понимаю using System.Linq;

а ругается на эту фукцию, :
        webbrowser1.Document.All.Where( x => x.GetAttribute("class") == "tab_head");
которую любезно написал дядя Вова

Автор: diadiavova 16.8.2010, 20:17
Цитата(Cobalt @  16.8.2010,  20:15 Найти цитируемый пост)
с# 2005 express не поддерживает linq что ли ?

 smile 
Или поставь более позднюю версию или по старинке - циклами. 
Код

List<HtmlElement> elements = new List<HtmlElement>();
foreach(HtmlElement el in webbrowser1.Document.GetElementsByTagName("td"))
{
    if(el.GetAttribute("class") == "tab_head")
    {
        elements.Add(el);
    }
}

В коллекцию elements добавляются все ячейки с заданным классом.

Или можно попробовать подключить библиотеку System.Core и импортировать пространство System.Linq, только синтаксис будет другим
Код

IEnumerable<HtmlElement> = Enumerable.Where(webbrowser1.Document.GetElementsByTagName("td"),
                                                 delegate (HtmlElement x) {return x.GetAttribute("class") == "tab_head";});

Но это уже совсем другая песня. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)