Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Паук(spider) для обработки ХТМЛ-страниц. TWebbrows


Автор: Pcrepair 13.10.2011, 07:46
Добрый день
Что известно:
1. компонент TWebBrowser может загрузить, обработать код (JavaScript и прочее ФЛЭШ)  и отобразить страницу
2. для паука отображать страницу в общем ни к чему, кроме отдельных случаев (визуальный контроль оператором), картинки, флэш тоже не нужны, JavaScript обрабатывать нужно во многих случаях, еще нужно в автомате вставлять логины-пароли и отправлять их сервер(кнопочку нажимать). в общем все что нужно - оставить текст со ссылками (УРЛ) и сохранить табличную структуру страницы - чтоб не куча букв

Вопрос
Можно ли средствами INDY10 и RAD2010 сделать следующее (и будет ли это лучше - стабильнее, правильнее идеологически):
1. загрузить код ХТМЛ-страницы по заданному УРЛ
2. обработать JavaScrtipt и ввести результаты обработки в страницу
3. удалить все лишнее (флеш, картинки, фреймы, дивы), оставить только таблицы, текст, ссылки с привязкой к тексту (теги соответсвующие)
4. отобразить на РИЧЕДИТ? документ (для контроля результата)
5. вставлять логины-пароли и отправлять их на сервер
6. Куки тоже нужно обрабатывать (чтоб сессии с сервером сохранялись)

Если у кого есть примеры кода, дайте посмотреть. Заранее спасибо

Автор: Akella 13.10.2011, 09:01
Цитата(Pcrepair @  13.10.2011,  07:46 Найти цитируемый пост)
2. обработать JavaScrtipt и ввести результаты обработки в страницу

нет

Добавлено через 1 минуту и 19 секунд
Цитата(Pcrepair @  13.10.2011,  07:46 Найти цитируемый пост)
4. отобразить на РИЧЕДИТ? документ (для контроля результата)

 smile  если бы RichEdit мог отображать HTML, то зачем придумали WebBrowser, подумай об этом

Добавлено через 2 минуты и 2 секунды
Все остальное можно без установки доп. компонент.

Автор: Snowy 13.10.2011, 11:04
Теоретически можно всё. Но это куча работы.
Причём, если выделение данных из файла задача не шибко сложная, то выполнение JS - это проблема, ибо его нужно не просто выполнить, а выполнить в контексте страницы.
А, чтобы создать контекст страницы, нужно её построить.
А, поскольку это уже получается браузерный движок, то лучше и взять браузерный движок, т.к. самому его городить - работа неподъёмная. Куча народу вон не может заставить JS работать одинаково в разных браузерах. А одному с этим бороться вообще нереально.
Самый простой вариант - взять готовый браузерный движок и не мучаться.
Не нравится IE - возьми chromium. Но по нему меньше информации - подсказать некому будет.
Ну или, как вариант, взломать гугль и выкрасть их робота...
P.S. Очень сомневаюсь, что роботы вообще должны выполнять JS. Думаю, что они просто вытаскивают из него информацию также, как из html.

Автор: Pcrepair 13.10.2011, 13:03
Цитата(Snowy @ 13.10.2011,  11:04)

P.S. Очень сомневаюсь, что роботы вообще должны выполнять JS. Думаю, что они просто вытаскивают из него информацию также, как из html.

Очень сомневаюсь, что роботы вообще должны выполнять JS. Думаю, что они просто вытаскивают из него информацию также, как из html.

вообще если посмотреть ЖАБА-код, который допустим выводит текст и ссылки, то там че те не найти этих ни текста ни ссылок, но если ЖАБА отключить то ничего не выводится. и таких сайтов полно.

Автор: Snowy 13.10.2011, 13:25
Я не убеждаю игнорировать JS.
Я говорю про то, что можно его разобрать также, как и html.
Если JS дёргает урл и вставляет результат в страницу, то робот может также дёрнуть этот урл и проанализировать результат.
Выполнять для этого скрипт нет необходимости - можно просто посмотреть, что он там тянет.

Автор: Pcrepair 13.10.2011, 13:56
есть и такие скрипты, типа 
Код

<script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?11" charset="windows-1251"></script>

но есть посложнее - вызов файла типа users.js, а там......
Код

nq.vh=mn.nn();mn.rn(nq.vh,nq.iq,{qn:function(kq){this.jq(kq);this.kq.onComplete=this.ot.ln(this);this.kq.ur=this.pt.ln(this);this.kq.sr=this.yq.ln(this);this.kq.timeout=(3698+1302);this.frequency=(this.kq.frequency||2);this.dt={} ;this.xt();} ,pt:function(yt,zt){if(this.kq.iu)this.kq.iu("offline, reconnecting");this._t();this.mu=setTimeout(this.xt.ln(this),(771+229));} ,yq:function(yt){if(this.kq.iu)this.kq.iu("timeout, reconnecting");this._t();this.mu=setTimeout(this.xt.ln(this),01750);} ,_t:function(){if(this.dt.kq)this.dt.kq.onComplete=undefined;clearTimeout(this.mu);} ,xt:function(){if(this.kq.wh)this.kq.pq=(this.kq.wh)();this.dt=new nq.aq(this.kq.url,this.kq);} ,ot:function(ou){try{var uu=nq.rq(ou);if(uu){(this.kq.hu||nq.hq)(uu);} else{if(this.kq.iu)this.kq.iu("reconnecting");} } catch(e){} this.mu=setTimeout(this.xt.ln(this),this.frequency*01750);} } );var xh={yh:function(link,title,zh,$h,width,height,_h){return'<a href="'+link+'"'+(_h!=null?' class="'+_h+'"':'')+' target="_blank" title="'+title+'" onclick="this.newWindow = window.open(\''+link+'\', \''+zh+'\', \'toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width='+width+',height='+height+',resizable=1\');this.newWindow.focus();this.newWindow.opener=window;return false;">'+$h+'</a>';} ,mi:function(content){return'<table class="inner"><tr>'+content+'</tr></table>';} ,ni:function(qi,ri,id,si,ti,ui,ct,hi){var ii=2;var link=ri+"?thread="+id;var ji='<td>';if(ti||si){ji+=xh.yh((hi||!si)?link:link+"&viewonly=true",localized[ti?0:1],"ImCenter"+id,qi,01200,(444+36),null);} else{ji+='<a href="#">'+qi+'</a>';} ji+='</td>';if(ti){ji+='<td class="icon">';ji+=xh.yh(link,localized[0],"ImCenter"+id,'<img src="'+$u+'/images/tbliclspeak.gif" width="15" height="15" border="0" alt="'+localized[0]+'">',(599+41),0x1e0,null);ji+='</td>';ii++;} if(si){ji+='<td class="icon">';ji+=xh.yh(link+"&viewonly=tr

и это только кусочек
и что с этим делать?

Автор: Akella 13.10.2011, 14:27
Погугли на тему Delphi JS JavaScript. Хотя Snowy прав, нужно выполнять в контексте страницы. Идеальный вариант, это встроенный TWebbrowser.

Автор: Чучмек 15.10.2011, 09:04
Цитата(Akella @  13.10.2011,  14:27 Найти цитируемый пост)
, это встроенный TWebbrowser. 

Только нужно обломать ему руки и ноги.

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