Что нового

[Данные, строки] Поиск данных в HTML

Kasol

Новичок
Сообщения
27
Репутация
0
Доброго времени суток Вам!
Сразу хочу извиниться,если не правильно назвал тему..или допустил ошибку с выбором раздела..

Я только начал осваивать работу с AutoIt,скачал русский Хел+просматриваю множество тем на данном форуме.Ну и естественно что-то для себя открываю новое..Решил нужно как-то,осваивать Autoit на практике..И тут пришла в голову идея,написать торгового бота..Было принято решение попробовать сделать его для Браузерной игры..2 дня почитания форума+работа с хел,дала мне возможность сделать авторизацию в игре,нажиманию различных линков,проведения боев..Что меня порадовала,в плане начальных знаний..А когда в голову пришла идея торгового бота,тут пришёл крах..И полная безвыходность,всё-же решил обратится к более продвинутым пользователям..А именно к вам,за вашей помощью..
Так вот, сама суть этого бота:
1.должен следить за статистикой ресурсов (т.е допустим www.autoit-script.ru это сайт..В скрипте я указываю ресурс "Молоко" и "Цену" цена допустим 200...задача бота найти это молоко по цене 200 и,перейти на ферму которая производит молоко.

А вот,собственно сам кусочек html кода где статистика

Код:
Купить < b >Молоко< /b > можно тут: < br >< br >
<table align=center border=0 class=wb>
<tr><td bgcolor=#ddffdd align=center class=wb> <b>Объект</b></td>
<td bgcolor=#ddffdd align=center class=wb><b> Может продать </b></td>
<td bgcolor=#ddffdd align=center class=wb><b>Цена</b></td>
</tr>
<tr><td class=wb bgcolor=#fefffe><a href=/map.php?sx=150&sy=151 >[F]</a> <a href=/object.php?id=567>#567</a>, <a href=/object.php?id=567>Молочная ферма</a>, <b>Sandw</b></td>
<td class=wb align=center bgcolor=#fefffe>2</td><td class=wb bgcolor=#fefffe> $210 </td>

(F)-Это остров где находиться эта ферма
($210)-Это цена продажи
(2)-Это количество литров у этого продавца
Извиняюсь за Нубство..У самого уже голова не чего не соображает..буду признателен если кто поможет,с выходом из данной ситуации :beer:
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Извиняюсь, забыл сказать что переход там осуществляется по координатам...
Код:
<a href=/map.php?sx=150&sy=151 >[F][/url]
Это координаты этой фермы..
Допустим я нахожусь тут
Код:
<a href=/map.php?sx=152&sy=141 >[F][/url]
а мне нужно дойти до
Код:
<a href=/map.php?sx=150&sy=151 >[F][/url]
как лучше осуществлять переход,по этим секторам? С начала я думал вбить все координаты в test.txt и для нахождения нужных координат использовать Данный скрипт : :scratch:

Код:
Global $filename = @ScriptDir & "\test.txt"
$hFile = FileOpen($filename, 0)
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть данный файл")
    Exit

Смысл был в том,что-бы нужные координаты считывались и текстового документа..запускаю скрипт,прохожу авторизацию.попадаю на нужную ссылку..Дальше нужен что-бы заработал Пункт N1...после открывается текстовой документ,и бот должен найти нужные координаты и самостоятельно туда придти...Извиняюсь что много вопросов..Но есть желание,доделать свою затею..Только без вашей помощи мне не обойтись :'(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вы собираетесь делать winhttp бот или через браузер Internet explorer? Если второе, то намного проще. Смотрите раздел по автоматизации Web. Задача поиска цены на "Молоко" решится очень быстро, когда вы поймете как достать данные innerText нужного узла. С переходом тоже просто, переход - это простая ссылка с атрибутом href. Что бы перейти, достаточно сделать click.
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
inververs сказал(а):
Вы собираетесь делать winhttp бот или через браузер Internet explorer? Если второе, то намного проще. Смотрите раздел по автоматизации Web. Задача поиска цены на "Молоко" решится очень быстро, когда вы поймете как достать данные innerText нужного узла. С переходом тоже просто, переход - это простая ссылка с атрибутом href. Что бы перейти, достаточно сделать click.
Извиняюсь, не указал через что собрался делать..Делаю через Internet explorer...Спасибо за ваш совет,сейчас буду искать нужную мне информацию. :ok: Тему пока не буду закрывать,ибо чувствую возникнет ещё много вопросов :IL_AutoIt_1:


Добавлено:
Сообщение автоматически объединено:

Благодаря Полезному совету от inververs ..Малость освоил функцию InnerText
Получилось что-то такое
Код:
#include <IE.au3>
$oIE = _IECreate("http://www.xxx.com") ;

$sMyString = "Нужное слово " ; В моём случае "250"
$oLinks = _IELinkGetCollection($oIE)
For $oLink in $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next

Только столкнулся с одной проблемой "250" Это даже и не линк..т.е по нему не возможно нажать мышкой...Скорее это просто наименование..Иными словами не чего не происходит...Ниже приведу кусок кода, из нужного Элемента
Код:
</tr><tr><td class=wb bgcolor=#f0fff0><a href=/map.php?sx=152&sy=149 >[F]</a> <a href=/object.php?id=969>#969</a>, <a href=/object.php?id=969>Молочная Ферма</a>, <b>_Травояд_</b></td>
<td class=wb align=center bgcolor=#f0fff0>35</td><td class=wb bgcolor=#f0fff0> $250 </td>
Вот тут-то для меня встала невыполнимая задача.Всё дело в том, что "250" Это цена этого молока. Такую цену,скрипт должен найти.И перейти к ферме этого человека.. В данном случае его ферма это "
Код:
<a href=/object.php?id=969>#969</a>
...Было-бы хорошо,если он один был с такой ценой..Но их может быть от 1 до 200 с ценой "250" но с разными объектами фермы.. "
Код:
<a href=/object.php?id=965>#965</a>
или
Код:
<a href=/object.php?id=959>#959</a>
и так около 200шт..Задача бота,найти цену "250" и перейти к товарищу который выставил такую цену..Забыл самую важную деталь.."35" это наличие товара..Опять-же,эта цифра всё время меняется..В общем суть в том..Что-бы найти ферму которая продаёт молоко за "250" с количеством не меньше "30" и перейти к нему..Вот,как такое воплотить? :scratch:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Смотори, ты дал кусок код, из него видно, что используются таблицы (<table>) Значит читаешь про функцию
Код:
_IETableGetCollection
и
Код:
_IETableWriteToArray
, тебе нужно найти таблицу со списком товаров, ферм итп.
Таблиц может быть несколько, каждая из них имеет свой индекс, начинается отсчет от нуля. Например, первая таблица - имеет индекс 0, вторая - 1 и так далее. Как только нашел нужную таблицу, запиши ее в массив 2 функцией. Если ты еще не знаешь, что такое массив и как им пользоваться, то самое время узнать.
В этом массиве у тебя будет innerText всех ячеек. Ищи все то, что тебе нужно, товар, цену, название.
Что бы искать:
Kasol [?]
молоко за "250" с количеством не меньше "30"
то это два условия связанных одновременно через
Код:
AND

например:
Код:
If $moloko_za=250 And $colizestvo>=30 Then

Как пользоваться If Then читаешь в справке.

Как
перейти к товарищу который выставил такую цену
, тебе нужно найти имя фермы в массиве., а затем функцией
Код:
_IELinkClickByText
нажать.

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

alex33

Скриптер
Сообщения
1,457
Репутация
186
OffTopic:
Kasol сказал(а):
Получилось что-то такое
Код:
#include <IE.au3>
$oIE = _IECreate("http://www.xxx.com") ;
Да, там такое получилось :D :smile: :D.
P.S. X Не удачный заменитель символов. :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Kasol

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
K

Kasol

Новичок
Сообщения
27
Репутация
0
Всем доброго времени суток...Сразу хочу извиниться перед Belfigor за нарушение правил.Извиняюсь недосмотрел,надеюсь в дальнейшем буду более внимателен. :ok:
А теперь по делу...И так следуя совету inververs разобрался наконец как работает функция
Код:
_IETableGetCollection
и
Код:
_IETableWriteToArray
...
И нашёл наконец нужную мне таблицу
Код:
$oTable = _IETableGetCollection($oIE, 8) ;~Нужная таблица

Дальше по совету inververs надо записать её в массив 2-х функций..Что такое массив,и как им пользоваться тоже не знал..пошёл читать документацию по нему.После прочтения,кое как имею представление о массиве. А что такое массив 2-х функций не понял,может невнимательно читал.как туда занести нужную таблицу 8...И каким образом,в этом массиве будет innerText всех ячеек.


как мне правильно выставить массив 2-х функций.. :stars: :blink:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуйте искать в массиве функцией
Код:
_ArraySearch
 
Верх