Autoit поиск текста в браузере

Обновлено: 18.07.2024

Сегодня я получил ссылочку на статью на хабре о технологии создания «макроса-бота для браузерной игры». Там же было написано с сожалением, что AutoIT мало представлен на хабре. Со штуками, описанными в статье я баловался год-два назад. В последнее время использую библиотеку IE.au3, которая позволяет творить с браузерными игрушками просто чудеса.Собственно информацией об этом и хотел бы поделиться. Только сразу предупреждаю — речь идет только работе под MS-Internet Explorer. Фанатам других браузеров скажу сразу — можно тоже самое делать наверное под любым браузером, только нужно искать соответствующую библиотеку и как они работают я сказать не могу. Скажу только о библиотеке IE.au3 — она входит в комплект стандартной установки AutoIT-а, достаточно хорошо протестирована, снабжена комментариями и примерами, описанные в ней функции удобно подсвечиваются и предлагаются к завершению при наборе с соответствующими подсказками, как стандартные функции пакета (или как там назвать этот самый AutoIT).

Выбор жертвы

Вариант №1 — примитивный вариант

Ищем на экране куда тыкать, и тыкаем «мышей» куда надо. Сразу скажу – это вариант неправильный, но для общей эрудиции я приведу текст скрипта с пояснениями.Кусок №1: ищем на экране «точку отсчета», за которую можно будет зацепиться и от неё считать местоположение квадратиков куда будем обтыкивать поле.
Func GetTopLeftCorner ( $window )
Global $x = 0 , $y = 0
WinActivate ( $window , "" )
If WinActive ( $window ) Then
$size = WinGetPos ( "[active]" )
For $i = 1 To $size [ 3 ]
If CheckRGB ( PixelGetColor ( $x + $i , $y + $i ) , Dec ( "402215" ) , Dec ( "5A352A" ) ) Then
If CheckRGB ( PixelGetColor ( $x + $i - 259 , $y + $i ) , Dec ( "331A0D" ) , Dec ( "624232" ) ) Then
For $j = $i To 1 Step - 1
If not CheckRGB ( PixelGetColor ( $i + 1 , $j ) , Dec ( "000000" ) , Dec ( "3A301D" ) ) Then
$x = $i
$y = $j
ExitLoop ( 2 )
EndIf
Next
ExitLoop
EndIf
EndIf
Next
EndIf
EndFunc
Функция проверяет цвета точек, пробегая по диагонали, ищет левый край окна игры в браузере. Затем просматривает цвета точек, пробегая вверх, ищет верхнюю границу окна игры. Найденную точку я буду считать «точкой отсчета». Расстояние от неё до каждой клетки на поле игры фиксированное и легко вычисляется по индексу.Результат работы функции возвращается в глобальных переменных $x и $y, которые соответствуют координатам точки по горизонтали и вертикали соответственно.При вызове функции в качестве параметра нужно указать заголовок окна программы. Его можно задать вручную, определив предварительно с помощью утилиты AutoIt Window Info, которая устанавливается вместе с AutoIt-ом.Приведенный выше скрипт использует самодельную функцию CheckRGB:
Func CheckRGB ( $color , $min , $max )
Local $rgb [ 3 ] [ 3 ]
$res = True
$rgb [ 2 ] [ 0 ] = BitAND ( $min , Dec ( "FF0000" ) ) / Dec ( "10000" )
$rgb [ 1 ] [ 0 ] = BitAND ( $min , Dec ( "00FF00" ) ) / Dec ( "100" )
$rgb [ 0 ] [ 0 ] = BitAND ( $min , Dec ( "0000FF" ) )
$rgb [ 2 ] [ 1 ] = BitAND ( $color , Dec ( "FF0000" ) ) / Dec ( "10000" )
$rgb [ 1 ] [ 1 ] = BitAND ( $color , Dec ( "00FF00" ) ) / Dec ( "100" )
$rgb [ 0 ] [ 1 ] = BitAND ( $color , Dec ( "0000FF" ) )
$rgb [ 2 ] [ 2 ] = BitAND ( $max , Dec ( "FF0000" ) ) / Dec ( "10000" )
$rgb [ 1 ] [ 2 ] = BitAND ( $max , Dec ( "00FF00" ) ) / Dec ( "100" )
$rgb [ 0 ] [ 2 ] = BitAND ( $max , Dec ( "0000FF" ) )
For $i = 0 To 2
If $rgb [ $i ] [ 0 ] > $rgb [ $i ] [ 1 ] Or $rgb [ $i ] [ 1 ] > $rgb [ $i ] [ 2 ] Then
$res = False
ExitLoop
EndIf
Next
Return $res
EndFunc

— Функция проверяет цвет точки, передаваемой в качестве первого параметра $color на то, чтобы она находилась в цветовом диапазоне от $min до $max, с учетом трех составляющих цвета точки (RGB). Возвращает, соответственно True или False.

Непосредственно процедура обтыкивания всех клеток на поле выглядит так:

For $i = 1 To 12
For $j = 1 To 10
MouseClick ( "left" , $x + ( $i * 40 ) + 103 , $y + ( $j * 40 ) + 172 , 1 , 1 )
Sleep ( 25 )
Next
Next

Тут все понятно. 10 и 12 в заголовках цикла это размер поля в клетках. Константы в параметрах MouseClick вычислены с помощью той же утилиты AutoIt Window Info, относительно определенной ранее «точки отсчета». Значение задержки в Sleep можно менять по своему желанию – это будет влиять на скорость обтыкивания, но слишком быстрое может приводить к ошибкам выполнения скрипта игры.

Преимущество этого метода – он работает в любом браузере. Везде где можно открыть окно игры так, чтобы была видна вся пашня.Недостаток – окно игры должно быть всегда открыто, нужно подбирать скорость обтыкивания и во время работы скрипта нельзя трогать мышь (иначе тыкнет не там где надо).

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Конфигурация компьютера
Процессор: Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz, 3701 МГц, ядер: 4, логических процессоров: 4
Материнская плата: Gigabyte Technology Co., Ltd. BIOS American Megatrends Inc. F11, 21.08.2012
Память: G.Skill 4096 Мб (DDR3), Corsair 8192 Мб (DDR3)
HDD: WDC WD10EALX-009BA0 ATA Device
Видеокарта: NVIDIA GeForce GT 220
Звук: VIA Technologies, Inc.
Монитор: Fujicom 200804220001 (23)
ОС: Windows 10 Professional x64
Нужно найти определенное значение в html коде загруженной страницы и сделать это найденное значение переменной »

-------
“Сделай так просто, как возможно, но не проще этого.”. “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”


P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»
Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community

Creat0R, а можно ли разъяснить что сие значит? Ну с _INetGetSource все ясно. А вот "StringRegExpReplace" мне не понятно. И с "ConsoleWrite" тоже не до конца ясно, т.е. сама команда ясна, выдает данные в поток, но все же не ясно что это дает.

Суть функции "StringRegExpReplace" ясна примере с сайта AutoIt. Но не понятно для чего она в данной ситуации. Она заменяет указанные символы на необходимые.

Было бы хорошо если бы мне разжевали данную функцию и почему именно такие параметры. А то я в англ. не очень хорош чтобы читать офф. док.

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Конфигурация компьютера
Процессор: Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz, 3701 МГц, ядер: 4, логических процессоров: 4
Материнская плата: Gigabyte Technology Co., Ltd. BIOS American Megatrends Inc. F11, 21.08.2012
Память: G.Skill 4096 Мб (DDR3), Corsair 8192 Мб (DDR3)
HDD: WDC WD10EALX-009BA0 ATA Device
Видеокарта: NVIDIA GeForce GT 220
Звук: VIA Technologies, Inc.
Монитор: Fujicom 200804220001 (23)
ОС: Windows 10 Professional x64
Нужно найти определенное значение в html коде загруженной страницы и сделать это найденное значение переменной »

-------
“Сделай так просто, как возможно, но не проще этого.”. “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”


P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»
Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community

Creat0R, а можно ли разъяснить что сие значит? Ну с _INetGetSource все ясно. А вот "StringRegExpReplace" мне не понятно. И с "ConsoleWrite" тоже не до конца ясно, т.е. сама команда ясна, выдает данные в поток, но все же не ясно что это дает.

Суть функции "StringRegExpReplace" ясна примере с сайта AutoIt. Но не понятно для чего она в данной ситуации. Она заменяет указанные символы на необходимые.

Было бы хорошо если бы мне разжевали данную функцию и почему именно такие параметры. А то я в англ. не очень хорош чтобы читать офф. док.

В предыдущей статье мы узнали, как находить нужное значение.

Здесь, рассмотрим, как взаимодействовать с сайтом, с помощью Autoit.

У меня получился вот такой код:

Local $oIE = _IECreate ( "http://www.coolcode.ru" , 0 , 1 , 0 , 1 )

В предыдущей статье у нас появилась переменная

Local $oIE = _IECreate ( "http://www.coolcode.ru" , 0 , 1 , 0 , 1 )

После выполнения команды в переменной $oDiv Будет находится следующий элемент:

<form method = "get" id = "searchform" action = "http://coolcode.ru/" > <label for = "s" class = "assistive-text hidden" > Поиск </label> <button id = "$Num" name = "submit" type = "submit" > Поиск </button>

В этом dive у нас находятся, как поле ввода в которое мы должны ввести 12, так и кнопка, по которой мы должны нажать.

Найдём поле ввода

устанавливаем значение поля ввода такое же как и содержание переменной $Num

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

Это всё сделано, для того что бы это хоть как то было похоже на взаимодействие человека. Многие сайты не любят роботов, а особенно когда те с ними общаются.

И последнее нажимаем на кнопку

Тоже самое сначала фокус, потом задержка, потом нажимаем на кнопку.

Комментарии:

Комментарии 19

>И ещё один момент, как скрипт может получить ответит с сайта всё ли прошло успешно или нет.
Здесь надо смотреть, что происходит на сайте, меняется цвет кнопки или появляется надпись. В общем как вы определяете, что всё прошло успешно.
Если же ничего на сайте не поменялось, то и определить не понятно как.

У меня ещё статья с примерами по этому поводу есть, там пример более подходящий вам: Autoit. Парсинг сайта или забрать значение с сайта.

Спасибо за столь быстрый ответ.
То есть для любого взаимодействия с сайтом необходимо производить через _IECreate (он как основа полагающее звено) ?

Сделал Local $oIE1 = _IECreate($sUrl, 0, 0, 0, 1) и всё равно страница отображается ((( странно.

Большое спасибо за материал! Единственное вы ошиблись: Поиск
А возможно искать элемент не по id, а допустим по классу или названию?

Прошу прощение за глупый вопрос, надо использовать _IEGetObjByName

Глупых вопросов не бывает, к тому же вы дали на него ответ. Так что большое спасибо.
Не понял где я ошибся.

В этом уроке вы узнаете

Зачем использовать AutoIt?

Как использовать AutoIT с Selenium

Продвигаясь вперед, мы узнаем, как загрузить файл в веб-драйвер селена с помощью autoIT. Здесь нам нужно три инструмента для этого.

  • Selenium Webdriver
  • Редактор AutoIT и идентификатор элемента
  • Окно, которое вы хотите автоматизировать

Как скачать и установить AutoIT

Шаг 1) : перейдите по этой ссылке.

Шаг 2) : наведите курсор на выпадающие меню «Autoit» и «Autoit Editor».

Как использовать AutoIT с Selenium

Шаг 3) Нажмите «Загрузки».

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 5) . Теперь загрузите «Autoit editor», нажав кнопку «Загрузки».

Как использовать AutoIT с Selenium

Шаг 6): Нажмите на ссылку, как показано ниже.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 6) : Для установки AutoIT-Click по обеим настройкам AutoIT по одной.

Перейдите в «C: \ Program Files (x86) \ AutoIt3 \ SciTE»

Как использовать AutoIT с Selenium

и щелкните файл «SciTE.exe», откроется редактор AutoIT, как показано на экране ниже.

Как использовать AutoIT с Selenium

Шаг 8) : теперь открывается элемент Identifier.

Перейдите в «C: \ Program Files (x86) \ AutoIt3»

Как использовать AutoIT с Selenium

И нажмите на файл «Au3Info.exe», идентификатор элемента откроется, как показано на экране ниже.

Как использовать AutoIT с Selenium

Примечание. После того, как вы закончили с этим идентификатором элемента, вам нужно закрыть его вручную, он не закроется автоматически.

Поиск элемента через идентификатор элемента и написание скрипта в редакторе AutoIT.

Например: мы будем использовать страницу «Написать нам» guru99 для загрузки резюме (файл Doc).

После нажатия кнопки «Выбрать файл» на странице «Написать нам» нам нужно вызвать скрипт AutoIT. Элемент управления сразу же переводится в autoit после нажатия кнопки «Выбрать файл» с помощью инструкции ниже, которая заботится о загрузке части.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Шаг 2) : Теперь откройте окно загрузки файлов, нажав «Выбрать файл», которое является активностью Windows.

Как использовать AutoIT с Selenium

Шаг 3) . Перетащите инструмент поиска в элемент окна «Имя файла» окна загрузчика файлов, чтобы найти информацию об основных атрибутах, как показано на приведенном ниже экране со стрелкой.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Начните писать скрипт для выбора файла для загрузки.

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

You can see a number of methods are displayed as shown in below screen. The good feature of AutoIT is that it is somewhat like Eclipse that suggests you some of the methods.

Как использовать AutoIT с Selenium

Parameter values for ControlFocus method:

Как использовать AutoIT с Selenium

Parameter values for ControlSetText method :

Как использовать AutoIT с Selenium

Предыдущие значения (т.е. атрибуты текстового поля «Имя файла») заменяются новыми значениями кнопки «Открыть». Вы можете видеть, что атрибут класса теперь изменен на «кнопку», которая ранее была «отредактирована» в окне идентификатора элемента AutoIT.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Значения параметров для метода ControlClick :

Этот метод нажимает на кнопку «Открыть» в окне загрузки файлов.

Как использовать AutoIT с Selenium

Шаг 6) . На приведенном ниже экране видно, что сценарий AutoIT завершен для обработки загрузчика файла. Теперь можно закрыть идентификатор элемента и сохранить сценарий как «FileUpload» в указанном месте (E: \ AutoIT).

Как использовать AutoIT с Selenium

Теперь вы не можете выполнить этот скрипт напрямую, вам нужно скомпилировать этот скрипт.

Как использовать AutoIT с Selenium

Как использовать AutoIT с Selenium

Теперь мы будем использовать этот скрипт AutoIT в веб-драйвере Selenium. Проверьте ниже для вывода.

AutoIT Загрузить файл в Selenium Webdriver

  • Откройте Eclipse и начните писать код.
  • Когда селен нажимает на кнопку «Выбрать файл», открывается окно загрузки файла.
  • Затем нам нужно вызвать скрипт AutoIT, элемент управления немедленно передается в AutoIT для загрузки файла, а затем элемент управления отправляется обратно в селен, как показано ниже.

Как использовать AutoIT с Selenium

Шаг 1) : Разработка сценария селена в Eclipse.

  • Класс Runtime позволяет сценарию взаимодействовать со средой, в которой выполняется сценарий.
  • getRuntime () получает текущую среду выполнения, связанную с этим процессом.
  • Методы exec () выполняют скрипт AutoIT (FileUpload.exe).

Выше строка вызовет скрипт AutoIT в селене и загрузит файл.

Как использовать AutoIT с Selenium

Шаг 2) : Выполните сценарий Selenium в Eclipse.

Читайте также: