Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 16:44   #11
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html строка);
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 18.07.2012, 20:04   #12
SnaiperArts
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Петррр, Спасибо!

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

Не подскажите как можно получить прямую ссылку на яндексе програмно для скачивания? Знаю, что можно(видел плагин на хром, при помощи которого можно было получить прямую ссылку, но не представляю как его изучить или же найти способ использовтаь его в своих целях), но не могу найти пока метода.
SnaiperArts вне форума Ответить с цитированием
Старый 18.07.2012, 20:50   #13
SnaiperArts
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Нашел способ получения прямой ссылки при помощи стороннего сайта, но проблема в получении возникла:

Вместо textBox1.Text ссылку с народа:

Код:
HtmlAgilityPack.HtmlDocument doc_dm = new HtmlAgilityPack.HtmlDocument();
            doc_dm.LoadHtml(getRequest("http://ru.savefrom.net/"+textBox1.Text));
            HtmlNodeCollection nodes_dm = doc_dm.DocumentNode.SelectNodes("//input[@class='file-name']");
            if (nodes == null)
                return;
            foreach (HtmlNode node in nodes_dm)
            {
                richTextBox1.Text = node.Attributes["value"].Value;
            }
Проблема видимов том, что на сайте ссылка появляется не мгновенно после загрузки страницы, а через некоторое время.
Выручите пожалуйста, очень уж надо!

Последний раз редактировалось SnaiperArts; 18.07.2012 в 21:11.
SnaiperArts вне форума Ответить с цитированием
Старый 18.07.2012, 22:46   #14
SnaiperArts
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Вроде как нашел способ получить ссылку с учетом задержки, используя webBrowser. Но не получается сделать задержку, чтобы страница полностью загрузилась(страница загружается полностью, но на ней есть ajax который подгружает данные чуть позднее).

Помоги с этим кодом, в нужном месте пометил, где нужно установить задержку:

Код:
webBrowser1.Navigate("http://ru.savefrom.net/"+textBox1.Text);
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
                Application.DoEvents();
            }
            // тут надо подождать сек 15-20
            
                
                HtmlAgilityPack.HtmlDocument docg = new HtmlAgilityPack.HtmlDocument();
                docg.LoadHtml(webBrowser1.Document.ToString());
                HtmlNodeCollection nodesg = docg.DocumentNode.SelectNodes("input[@class='file-name']");
                if (doc != null)
                {
                    foreach (HtmlNode node in nodesg)
                    {
                        richTextBox1.Text = richTextBox1.Text + node.Attributes["value"].Value;
                        
                    }
                }
Что-то ничего не могу толком придумать. Sleep останавливает все процессы, а с таймером ничего путного придумать не могу.
Помогите пожалуйста.

--------------------------
Пытаюсь решить данную проблему через backgroundWorker1, хоть корявый способ, но надеюсь что сработает. Вылазиет одна ошибка, пока не пойму как решить. Поправьте если не в ту сторону копаю

Основной код:
Код:
            webBrowser1.Navigate("http://ru.savefrom.net/"+textBox1.Text);
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
            
            backgroundWorker1.RunWorkerAsync(); // подключаю второй поток, чтобы дать загрузиться странице
            
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
               Application.DoEvents();
            }
Код в backgroundWorker1, сдесь же ошибка:
Код:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
           
            Thread.Sleep(30000);// задержка, чтобы не дать спарсить не загруженную страницу
            HtmlAgilityPack.HtmlDocument docg = new HtmlAgilityPack.HtmlDocument();
            

            docg.LoadHtml(webBrowser1.Document.ToString()); // тут при выполнении ошибка "Заданное приведение является недопустимым."
           

            HtmlNodeCollection nodesg = docg.DocumentNode.SelectNodes("input[@class='file-name']");

            if (nodesg != null)
            {
                foreach (HtmlNode node in nodesg)
                {
                    richTextBox1.Text = richTextBox1.Text + node.Attributes["value"].Value;

                }
            }
        }
Помоги пожалуйста! Если есть другой способ получить прямую ссылку с народа или загрузить страницу с ajax, я просто жажду узнать эти способы!

Последний раз редактировалось SnaiperArts; 19.07.2012 в 16:53.
SnaiperArts вне форума Ответить с цитированием
Старый 19.07.2012, 17:29   #15
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Ничего в голову не приходит. Посмотрите API яндекса, посмотрите как работают скрипты на стороне клиента.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 19.07.2012, 17:35   #16
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Оказывается для narod нет API
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 19.07.2012, 17:41   #17
SnaiperArts
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Посмотрите код выше. Может с помощью потока и задержки можно загрузить данные из ajax. Мне пока мешает ошибка
Не пойму как грамотно сделать задержку. И в том коде где ошибка такое ощущение, что в
Код:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
не может обратиться к webBrowser(тут могу ошибаться)
___________________________________ ______________
На основе этого обсуждения решил делать через второй поток _http://forum.vingrad.ru/forum/topic-340793.html Но реализация подкачала с моей стороны...

Последний раз редактировалось SnaiperArts; 19.07.2012 в 17:50.
SnaiperArts вне форума Ответить с цитированием
Старый 19.07.2012, 18:15   #18
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

webbrowser использует COM компонент ие. которые может быть запущен только в STA.
попробуйте через new Thread() используя SetApartmentState() в STA
Код:
var t = new Thread(
                () =>
                {
                    //do all job and sleep
                });
            t.SetApartmentState(ApartmentState.STA);
            t.Start();

Последний раз редактировалось Reskov; 19.07.2012 в 18:18.
Reskov вне форума Ответить с цитированием
Старый 19.07.2012, 18:54   #19
SnaiperArts
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Если я вас правильно понял, то год должен был такой быть

Код:
webBrowser1.Navigate("http://ru.savefrom.net/"+textBox1.Text);
            webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
          
            var t = new Thread(
               () =>
               {
                   Thread.Sleep(20000);

                   HtmlAgilityPack.HtmlDocument docg = new HtmlAgilityPack.HtmlDocument();
                   docg.LoadHtml(webBrowser1.DocumentText); // ОШИБКА
                   HtmlNodeCollection nodesg = docg.DocumentNode.SelectNodes("input[@class='file-name']");
                
                   if (nodesg != null)
                   {
                       foreach (HtmlNode node in nodesg)
                       {
                           richTextBox1.Text = richTextBox1.Text + node.Attributes["value"].Value;

                       }
                   }
               });
            t.SetApartmentState(ApartmentState.STA);
            t.Start();
           
            while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
               Application.DoEvents();
            }
Но на том же самом месте(я про загрузку html) опять появилась ошибка "Заданное приведение является недопустимым."

Может ошибка не в этом?
SnaiperArts вне форума Ответить с цитированием
Старый 19.07.2012, 20:02   #20
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

webbrowser работает в sta, и должен либо быть создан там же... либо обращаться к нему через invoke... на сколько я понимаю ошибка именно в этом
Код:
           string s;
            webBrowser1.Invoke(new Action(() => { s = webBrowser1.DocumentText; }));
            docg.LoadHtml(s);
либо создайте webbrowser в том же threade
ps
при использование invoke можно не писать t.SetApartmentState(ApartmentState. STA);

Код:
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
            {
               Application.DoEvents();
            }
это тоже не понятно зачем

Последний раз редактировалось Reskov; 19.07.2012 в 20:05.
Reskov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
парсинг сайта Jadson Работа с сетью в Delphi 0 14.05.2012 23:30
Парсинг ссылок сайта demiancz Общие вопросы Delphi 9 27.02.2012 01:00
парсинг сайта на bash Backo Помощь студентам 2 15.09.2011 17:24
парсинг сайта CodeNOT PHP 1 21.03.2011 09:48
Парсинг сайта AnToHa-KiLL Общие вопросы Delphi 3 30.06.2009 08:22