Русское сообщество AutoIt

  • Май 20, 2012, 12:57:02 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

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

Новости:

На форуме было сделано несколько небольших изменений...

1) Расширено поле поиска, теперь можно выбрать, искать в текущей теме, текущем разделе, по всему форуму, или с помощью Google.

2) Новым участникам форума (до 20-ти сообщении) над формой создания новой темы отображается информационный блок с некоторыми правилами и рекомендациями по созданию новой темы.

17.07.2010

Реклама

Автор Тема: [Данные, строки] Нужен шаблон для получения текста ссылки из HTML кода!  (Прочитано 2807 раз)

0 Пользователей и 2 Гостей смотрят эту тему.

r35p3ct [?]

  • Продвинутый
  • ***
  • Репутация: 56
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 222
  • Версия AutoIt: 3
    • Награды
zip-per  [?]
Цитата
Вот нужная часть

Есть мнение, что это код вы взяли из браузера, а _INetGetSource получает немного другой код.
Видимо IE, как то по особому его преобразует, сам с таким сталкивался.

Код: AutoIt [Выделить]
consolewrite( $sHTMLMAP)
 

PS По поводу названий тем, то мне кажется в этом разделе они не сильно будут различаться и придумать что то оригинальное, будет сложнее, чем самому составить шаблон :D




  Записан

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
r35p3ct
Спасибо за подсказку, поменял функцию, работает. Но результат все равно не могу вытащить.
Все равно разберусь с этой  >:(.
Обязательно отпишусь в чем проблема была!




  Записан
Жизнь - это игра! И я ни как не могу пройти уровень, где моя зар.плата 2000$.

r35p3ct [?]

  • Продвинутый
  • ***
  • Репутация: 56
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 222
  • Версия AutoIt: 3
    • Награды
Лучше покажи, что в консоль записалось(исходник страницы), и думаю решение сразу появится, намного быстрее.




  Записан

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
Код: AutoIt [Выделить]
$sMAP = _INetGetSource("http://www.ххх.ru/me/")
 MsgBox(0, '', $sMAP, 2)
Выводит исходник, но нужные мне сроки не входят на экран.

Тогда дописываю:
Код: AutoIt [Выделить]
$sMAP = _INetGetSource("http://www.ххх.ru/me/")
 MsgBox(0, '', $sMAP, 2)
 $sMAP2 = StringRegExp($sMAP, ".*?title='Вы находитесь в секторе.*?\[Z\](.*?)'><b>\[Z\](.*?)</b>", 3)
 MsgBox(0, "", $sMAP2[0])

Выдает ошибку:

MsgBox(0, "", $sMAP2[0])
MsgBox(0, "", $sMAP2^ ERROR
Error: Subscript used with non-Array variable.

Пошел юзать гугл в поисках описания этой проблемы, т.к. в справке никакого Array найти не могу. А что за массив ему нужен тоже не понимаю.

 
« Последнее редактирование: Февраль 14, 2011, 21:41:12 от zip-per »



  Записан

r35p3ct [?]

  • Продвинутый
  • ***
  • Репутация: 56
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 222
  • Версия AutoIt: 3
    • Награды
zip-per  [?]
Цитата
Выводит исходник, но нужные мне сроки не входят на экран.

Тогда откуда их StringRegExp возьмет то?)))
Код наверно в фрейме...




  Записан

madmasles [?]

  • Локальный модератор
  • *
  • *****
  • Репутация: 1425
  • Online Online
  • Пол: Мужской
  • Сообщений: 3814
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
zip-per
Сделайте так:
Код: AutoIt [Выделить]
;...
$sMAP = _INetGetSource("http://www.ххх.ru/me/")
FileWrite(@ScriptDir & '\test.txt', $sMAP)
И напишите здесь тот кусок текста из файла test.txt, в котором то, что Вы ищите.

Garrett [?]

  • Модератор
  • *
  • *****
  • Репутация: 548
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 2056
  • Версия AutoIt: 3.3.6.1
    • Награды
zip-per
Сделайте следующее.
Откройте (нужную) страницу в браузере, кликните на странице ПКМ далее:
FF -> "Исходный код страницы"
IE -> "Посмотреть HTML-код"
Оpera -> "Исходный код"
Chrome -> "Просмотр кода страницы"
Выделите вес код и сохраните в файл.
Файл прикрепите к посту.




  Записан

--------------------------------------------------------------------------------------------------
Все стандарты Document Object Model HTML
--------------------------------------------------------------------------------------------------
«Жизнь – цепь, а мелочи в ней – звенья. Нельзя звену не придавать значения!»

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
Garrett
Конечно спс, за столь подробное описание выдергивание исходника, но если бы я не знал как его выдернуть, то тут мне вообще делать нечего было бы   :)

Выдернул его обычным способом (по методу Garrett  ;))
То что получил, прикрепил к сообщению.

Кстати, функция
Код: AutoIt [Выделить]
$sMAP = _INetGetSource("http://www.ххх.ru/me/")
 MsgBox(0, '', $sMAP[0])
Выводит на экран то-же самое.

А вот методом madmasles выдал код главной страницы, с формами для входа. Не думаю, что он интересен будет, не стал выкладывать.

P.S. Уважаемые модераторы, я опять накосячил. Закачал файл на файлообменник. Кнопки удалить не нашел. Удалите его пож-та!
http://autoit-script.ru/index.php?action=downloads;sa=view;down=73


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Февраль 15, 2011, 10:40:57 от zip-per »



  Записан

madmasles [?]

  • Локальный модератор
  • *
  • *****
  • Репутация: 1425
  • Online Online
  • Пол: Мужской
  • Сообщений: 3814
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
zip-per
У меня с Вашим файлом работают оба варианта:
Код: AutoIt [Выделить]
$sHTMLMAP = FileRead(@ScriptDir & '\map[1].txt')
$aMAP = StringRegExp($sHTMLMAP, "Вы находитесь в секторе \[Z\] (.+)'><b>", 3)
;$aMAP = StringRegExp($sHTMLMAP, "секторе\s?\[Z\]\s?(.+)'>", 3);у меня и так работает
If Not @error Then
    MsgBox(0, @error, $aMAP[0])
Else
    MsgBox(0, 'Error', @error)
EndIf
$sMAP = StringRegExpReplace($sHTMLMAP, "(?s).*?Вы находитесь в секторе \[Z\] (.+)'><b>?.*", '\1')
;$sMAP = StringRegExpReplace($sHTMLMAP, "(?s).*?секторе\s?\[Z\]\s?(.+?)'>?.*", '\1');и так
MsgBox(0, @extended, $sMAP)
« Последнее редактирование: Февраль 15, 2011, 09:53:55 от madmasles »



  Записан

r35p3ct [?]

  • Продвинутый
  • ***
  • Репутация: 56
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 222
  • Версия AutoIt: 3
    • Награды
OffTopic_INetGetSource качает видмо страницу с авторизацией ;D
Чтобы получить нужные данные, сначала залогинься, потом передай куки и получишь, то что нужно, это уже другая, менее легкая тема.




  Записан

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
madmasles
У меня тоже с файлом txt сработал. Но вот со страницей IE не хочет, возвращает "1" - нет совпадений.

r35p3ct
Ты чертовски прав!
Код: AutoIt [Выделить]
_IENavigate ($oIE, "http://www.ххх.ru/map.php",1) ;переходим на страницу где будем искать данные, не обязателен, но что бы навеняка удостовериться, что страница доступна
$sMAP = _INetGetSource("http://www.ххх.ru/map.php") ; присваиваем переменной $sMAP код страницы
FileWrite(@ScriptDir & '\test555.txt', $sMAP) ; сохраняем код страницы в файле txt для проверки переменной $sMAP

$sHTMLMAP = StringRegExp($sMAP, "Вы находитесь в секторе \[Z\] (.+)'><b>", 3) ;Присваиваем переменной найденные данные
If Not @error Then
    MsgBox(0, @error, $sHTMLMAP[0])
Else
    MsgBox(0, 'Error', @error)
EndIf

После того как получил ответ "1", полез читать что в test555.txt. А там как раз главная страница с авторизацией. Я ее получал еще и раньше, выше отписывался, но не придал значения. Как же так? Вход я выполнил до запуска скрипта, по моей логике страница где надо производить поиск должна быть доступна, я на нее браузером перехожу. Почему сервер просит куки? И как теперь ему их отправить?
« Последнее редактирование: Февраль 15, 2011, 11:35:38 от zip-per »



  Записан

madmasles [?]

  • Локальный модератор
  • *
  • *****
  • Репутация: 1425
  • Online Online
  • Пол: Мужской
  • Сообщений: 3814
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
zip-per,
Если Вы переходите на нужную Вам страницу при помощи _IENavigate(), то, может, лучше и ее текст читать с помощью _IEBodyReadText() или _IEBodyReadHTML()?




  Записан

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
madmasles
Спасибо! Прочитал страницу ту которую надо, но теперь она видоизменилась  :blink: не понял почему правда. Прикрепил ее код к сообщению если кому интересно конечно.
Опять испытываю трудности с StringRegExp. Не находит  :(
Код: AutoIt [Выделить]
_IENavigate ($oIE, "http://www.ххх.ru/map.php",1)
$sMAP = _IEBodyReadHTML($oIE)
FileWrite(@ScriptDir & '\test555.txt', $sMAP)

$sHTMLMAP = StringRegExp($sMAP, "<B>[Z] (.+)</B></A><BR></TD></TR></TBODY></TABLE></TD>", 3) ; Под (.+) ищем "Energy One"

If Not @error Then
    MsgBox(0, @error, $sHTMLMAP[0])
Else
    MsgBox(0, 'Error', @error)
EndIf


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться




  Записан

madmasles [?]

  • Локальный модератор
  • *
  • *****
  • Репутация: 1425
  • Online Online
  • Пол: Мужской
  • Сообщений: 3814
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
zip-per
Код: AutoIt [Выделить]
$sHTMLMAP = FileRead(@ScriptDir & '\test555.txt')
$aMAP = StringRegExp($sHTMLMAP, 'Вы находитесь в секторе \[Z\] (.+)" href', 3)
;$aMAP = StringRegExp($sHTMLMAP, 'секторе\s?\[Z\]\s?(.+)"\s?href', 3);у меня и так работает
If Not @error Then
    MsgBox(0, @error, $aMAP[0])
Else
    MsgBox(0, 'Error', @error)
EndIf
$sMAP = StringRegExpReplace($sHTMLMAP, '(?s).*?Вы находитесь в секторе \[Z\] (.+?)" href?.*', '\1')
;$sMAP = StringRegExpReplace($sHTMLMAP, '(?s).*?секторе\s?\[Z\]\s?(.+?)"\s?href?.*', '\1');и так
MsgBox(0, @extended, $sMAP)




  Записан

zip-per [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 30
  • Версия AutoIt: 3.3.6.1
    • Награды
 :laugh:
Ураа!!! Заработало!!!
Уважаемые, всем огромное спасибо за вашу помощь!!!
 :thumbs_up:




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Данные, строки] Таблица HTML в TXT
AutoIt для новичков
Rjevsky 0 1418 Последний ответ Декабрь 20, 2009, 13:39:02
от Rjevsky
[Данные, строки] Найти вхождение в строке (html код)
AutoIt для новичков
Fever 32 3536 Последний ответ Сентябрь 16, 2010, 12:18:55
от Houl777
[Данные, строки] Копирование куска текста из HTML-кода страницы
AutoIt для новичков
coldmine 3 1347 Последний ответ Июнь 27, 2010, 18:16:20
от gregaz
[Данные, строки] Поиск текста в файле и выдача номера строки
Стол заказов
Sky-WaLkeR 3 2134 Последний ответ Сентябрь 25, 2010, 00:05:22
от Sky-WaLkeR
[RegExp] Извлечение текста из html кода
Регулярные выражения и прочее
kosjachok 6 1811 Последний ответ Ноябрь 25, 2010, 14:25:44
от gregaz
Функция для получения текста строки в combobox
GUI - Графический интерфейс пользователя
lexaSF 0 822 Последний ответ Декабрь 31, 2010, 01:58:11
от lexaSF
[Данные, строки] Символы ? . > = " сприсутствуют в тексте строки как должен выглядеть шаблон
Регулярные выражения и прочее
general66 5 2574 Последний ответ Май 02, 2011, 01:03:39
от general66
[Данные, строки] Изменение и сохранение кода программы
Стол заказов
Prorok 3 651 Последний ответ Май 02, 2011, 00:57:24
от VladUs
Перенесено: StringRegExp нужен правильный "Искомый образец (шаблон)"
Стол заказов
CreatoR 0 161 Последний ответ Январь 28, 2012, 13:01:46
от CreatoR
[Сеть, интернет] Нужен шаблон для команды IniRead, для чтения file.ini построчно.
Автоматизация IE и Web-интерфейса
DStalker 4 220 Последний ответ Апрель 14, 2012, 19:42:20
от DStalker


Реклама