|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа с html-кодом страницы, поиск и копирование нужных строк |
|
|
[решено] Работа с html-кодом страницы, поиск и копирование нужных строк
|
Новый участник Сообщения: 14 |
Профиль | Отправить PM | Цитировать Здравствуйте!
Пишу программку, которая заходит на сайт Одноклассники, загружает мой логин и пароль, а затем анализирует мой форум, нет ли там новых сообщений. 1. Подскажите, как получить html-код страницы после загрузки моего аккаунта? Не знаю, можно ли тут использовать _INetGetSourse(), ведь при каждой загрузке страницы моего пользователя адрес страницы меняется. 2. Я хочу найти в html-коде страницы текст между тегами <div id="hook_SmilizeContent_id" class="msg-area"> и </div></div> и записать его в переменную, как это лучше сделать? Что использовать StringregExpReplace или StringregExp - я с ними совсем запуталась. |
|
Отправлено: 11:30, 25-03-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать 1. к примеру то же самое для вконтакте:
$sPage = _INetGetSource('www.vkontakte.ru/login.php?email=' & $sCfgEmail & '&pass=' & $sCfgPass) If StringInStr($sPage, '<div id=''error''>') Then $aNewMsg = StringRegExp($sPage, '<div id=''error''>(.+)</div>', 1) ;~ ...ошибка входа: неверный логин или пароль EndIf $sPage = _INetGetSource('www.vkontakte.ru/mail.php?out=0&st=1') (т.е. _INetGetSource возможно всетаки как то использует Internet Explorer) Цитата Sestrichka:
2. вариант: |
|
------- Отправлено: 13:14, 25-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать _INetGetSource можна было б использовать, но тут ведь нужно после запуска страницы еще на ссылку МОИ СООБЩЕНИЯ перейти... Вот я предлагаю такое решение, при котором в переменную заносится последнее сообщение:
#include <IE.au3> $oIE = _IECreate (" http://odnoklassniki.ru/",0,0) _IELoadWait ($oIE) $oUser =_IEGetObjByName($oIE,"st.email") $oPass =_IEGetObjByName($oIE,"st.password") $oSabmit =_IEGetObjByName($oIE,"button_go") _IEFormElementSetValue ($oUser, 'тут пишем логин') _IEFormElementSetValue ($oPass, 'Тут пароль пишем') ; Дальше идет нажатие на кнопку Войти _IEAction ($oSabmit,"click") _IELoadWait ($oIE) ;Дальше клик на кнопку Мои сообщения _IELinkClickByText ($oIE, "Мои сообщения") $KodHtml=_IEDocReadHTML ( $oIE ) _IEQuit($oIE) $pattern="(?s).*?</TABLE></DIV><A href=.*?tkn=.*?>(.*?)</A>.*?id=hook_SmilizeContent_id>(.*?)</P></DIV>.*" ;там где \1 - имя написавшего, а где \2 - текст сообщения $sRezultat=StringregExpReplace($KodHtml,$pattern, "\1 \2") ;отсеивание ненужного мусора. $sRezultat2=StringregExpReplace($sRezultat,"(?s)(<.*?>)", " ") MsgBox(0,"Последнее сообщение",$sRezultat2) |
------- Отправлено: 15:06, 25-03-2009 | #3 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Цитата beve:
+ попробовать может через _IECreateEmbedded - еще лучше будет, если получится? |
|
------- Отправлено: 15:41, 25-03-2009 | #4 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Цитата proxy:
ругается на строку: $sPage = _INetGetSource('www.vkontakte.ru/mail.php?out=0&st=1') пишет:"Unknown function name" Не знаю в чем дело, я пока в Autoit туповата. Может я где-то ошиблась? #include <IE.au3> #include <Array.au3> $sCfgEmail = 'логин' $sCfgPass = 'пароль' $sPage = _INetGetSource('www.vkontakte.ru/login.php?email=' & $sCfgEmail & '&pass=' & $sCfgPass) If StringInStr($sPage, '<div id=''error''>') Then $aNewMsg = StringRegExp($sPage, '<div id=''error''>(.+)</div>', 1) ;~ ...ошибка входа: неверный логин или пароль EndIf $sPage = _INetGetSource('www.vkontakte.ru/mail.php?out=0&st=1') $aResult = StringRegExp($aPage, '<div id="hook_SmilizeContent_id" class="msg-area">((?s).+?)</div></div>', 3) _ArrayDisplay($aResult, '$aResult') |
||
Последний раз редактировалось Sestrichka, 25-03-2009 в 16:22. Отправлено: 16:03, 25-03-2009 | #5 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Цитата beve:
Вот тут я что-то туплю: Цитата beve:
Потому, что если без изменений беру твой код, то выводит весь код страницы |
||
Отправлено: 16:17, 25-03-2009 | #6 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать вариант от beve, тут самый правильный.
хз, как, но отловить php или какой другой cgi скрипт авторизация не знаю как )) а то было бы легкче Цитата Sestrichka:
1. классная полезная штука 2. и мой пробный вариант сообщения о новых сообщениях ) Цитата proxy:
показал для разбора: по аналогии )) |
||
------- Отправлено: 17:06, 25-03-2009 | #7 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Может так? Хотя конечно, если бы можно было через _INetGetSource как то войти...было бы быстрее:
#include <IE.au3> $oIE = _IECreate (" http://odnoklassniki.ru/",0,0) _IELoadWait ($oIE) $oUser =_IEGetObjByName($oIE,"st.email") $oPass =_IEGetObjByName($oIE,"st.password") $oSabmit =_IEGetObjByName($oIE,"button_go") _IEFormElementSetValue ($oUser, 'Тут логин пишем') _IEFormElementSetValue ($oPass, 'Тут пароль пишем') ; Дальше идет нажатие на кнопку Войти _IEAction ($oSabmit,"click") _IELoadWait ($oIE) $KodHtml=_IEDocReadHTML ( $oIE ) ;Дальше клик на кнопку Выход _IELinkClickByText ($oIE, "Выход") ;тут после нажатия на кнопку выход, можно сразу убить процесс, предварительно установив в функции -- IELinkClickByText ( ByRef $o_object, $s_linkText [, $i_index = 0], $f_wait = 1]] ) параметр $f_wait = 0. Так будет на несколько секунд быстрее, но я написал стандартный способ _IEQuit($oIE) $pattern="(?s).*?hook_SmilizeContent_id.*?>(.*?)</DIV>.*" $sRezultat=StringregExpReplace($KodHtml,$pattern, "\1") ;отсеивание ненужного мусора. $sRezultat2=StringregExpReplace($sRezultat,"(?s)(<.*?>)", " ") ;тут дальше, просто как одно из решений, производится поиск слова, это я к тому,что если сообщений нету, то вернется весь код страницы..., и следовательно если это слово DIV отсуствует в обработанной переменной $sRezultat2, то сообщение есть. $result = StringInStr($sRezultat2, "DIV") if $result=0 then MsgBox(0,"Последнее сообщение",$sRezultat2) Else MsgBox(0,"Последнее сообщение","Новых сообщений нету!") endif Exit Сам исправил... |
------- Последний раз редактировалось beve, 25-03-2009 в 20:56. Отправлено: 17:26, 25-03-2009 | #8 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Цитата beve:
Мне нужен просто текст последнего сообщения - это текст между первыми найденными тегами <div id="hook_SmilizeContent_id" class="msg-area"> и </div>, который будет служить эталоном для сравнения. Например, <div id="hook_SmilizeContent_id" class="msg-area"></div> тут текст,который должен занестись в $sRezultat = <p>Привет! :-D</p> Вот это у меня и не получается. Твоя прога выводит: "Новых сообщений нету!" даже, если новое сообщение есть. Может как-то зациклить надо, чтоб проверка происходила периодически после изменения странички? Только я не знаю, как изменение на странице отследить. |
|
Отправлено: 16:37, 26-03-2009 | #9 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата Sestrichka:
Дальше: после того как в переменную $sRezultat будет занесен текст сообщения, он будет с "мусором", которым может быль например ссылка на смайлик заключенный в <> поэтому я и остсеиваю такой мусор при помощи $sRezultat2=StringregExpReplace($sRezultat,"(?s)(<.*?>)", " "), и при этом тот текст который хранится в переменной $sRezultat будет проанализирован, и все нахождения любого текста, заключенного в <>, будут заменены просто на пробел. |
|
------- Последний раз редактировалось beve, 26-03-2009 в 21:54. Отправлено: 21:32, 26-03-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Сохранение загруженной html-страницы | Sestrichka | AutoIt | 12 | 12-11-2009 18:50 | |
[решено] Копирование текста из веб страницы | r35TnX | AutoIt | 9 | 02-03-2009 18:58 | |
[решено] Поиск нужного текста в html коде страницы | ph0en1x | AutoIt | 8 | 16-02-2009 02:38 | |
[решено] Поиск файлов в подпапках и их последующее копирование | D_Master | AutoIt | 4 | 10-02-2009 07:32 | |
Select с HTML кодом | vadimiron | Вебмастеру | 10 | 19-02-2007 11:34 |
|