Что нового

Поиск текста на странице браузера и кликание по нему лкм

darow

Новичок
Сообщения
50
Репутация
1
Я начал изучать AutoIt вот только несколько дней и начал с написания небольшого бота, который бы кликал мышью на странице IE найденный текст и в этой ветке я нашел самый близкий пример к моей задаче:

Код:
; *******************************************************
; Пример 2 - Open browser to the AutoIt homepage, loop through the links
;               on the page and click on the link with text "wallpaper"
;               using a sub-string match.
; *******************************************************

#include <IE.au3>
$oIE = _IECreate("http://betcityru.com/live/line.php")

$sMyString = "Саито"
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next


вот сама страничка:




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

И на самом деле отрабатывает скрипт идеально.
В данном скрипте ищется постоянный текст и по нему кликает мышь.
Но в моей задаче первоначальной текст не постоянный, фамилии могут быть разные в разное время...
Подскажите что нужно добавить в данный пример что бы скрипт фамилию брал из текстовика и искал уже на странице...
Я конечно могу топорно в код скрипта вносить эту фамилию и потом запускать скрипт но наверное это не самый идеальный вариант....
Заранее спасибо что откликнулись на мой вопрос...
 

Вложения

  • 33333333.jpg
    33333333.jpg
    58.6 КБ · Просмотры: 25

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
FileRead
или
Код:
FileReadLine
в помощь.
 

darow

Новичок
Сообщения
50
Репутация
1
alex33 сказал(а):
Код:
FileRead
или
Код:
FileReadLine
в помощь.

вот спасибо)) еще бы знать как это прикрутить к основному скрипту... можно поподробнее, пожалуйста
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
darow
Код:
#include <IE.au3>
Global $filename = @ScriptDir & "\find.txt"
$oIE = _IECreate("http://betcityru.com/live/line.php")

$sMyString = FileRead($filename); читаем весь текст из файла
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next

attention to the lines 2 and 5 :smile:
 

darow

Новичок
Сообщения
50
Репутация
1
Спасибо, действительно работает!
Сейчас продолжу тюнинг, что бы решить задачу полностью
 

darow

Новичок
Сообщения
50
Репутация
1
Получилось у нас регистрироваться и нажимать нужную фамилию на сайте и открывается текущий матч, который нас в данное время и интересует:
Код:
#include <IE.au3>
Global $sLogin = "g 5627140"
Global $sPassword = "340572"

_IELoadWaitTimeout(10000)
Do
$oIE = _IECreate("http://betsbc.com/")
If @error Then ExitLoop

$oFrame1 = _IEFrameGetCollection($oIE, 0)
If @error Then ExitLoop

For $c = 1 To 5
$oForm = _IETagNameGetCollection($oFrame1, "form", 0)
If @error = 0 Then ExitLoop
Sleep(1000)
Next

$oLogin = _IEGetObjByName($oForm, "login")
_IEFormElementSetValue($oLogin, $sLogin)
If @error Then ExitLoop

$oPassword = _IEGetObjByName($oForm, "pwd")
_IEFormElementSetValue($oPassword, $sPassword)
If @error Then ExitLoop

_IEFormSubmit($oForm, 0)
;If @error Then ExitLoop
Until 1

Sleep(3000)

Global $filename = @ScriptDir & "\find.txt"
_IENavigate($oIE, "http://betsbc.com/live/line.php")

$sMyString = FileRead($filename); читаем весь текст из файла
$oLinks = _IELinkGetCollection($oIE)
If IsObj($oLinks) Then
; дополнительная проверка
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
EndIf


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

П.С. Скрипт выше прилагаю рабочий можно его пробывать всем, только деньги не сильно тратьте)...


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

Ни кто так и не попробует помочь?
 

Вложения

  • 5555555555555.jpg
    5555555555555.jpg
    86.7 КБ · Просмотры: 25

darow

Новичок
Сообщения
50
Репутация
1
Попробовали через такую функцию:
Код:
Sleep(5000)
_IENavigate($oIE, "http://betsbc.com/left.php?livebet=13105896.357")
Sleep(5000)
ControlClick("Сообщение с веб-страницы", "", "Button1"); OK
MsgBox(0, "", "OK")


выдает ошибку, видимо нужно попробовать нажать мышкой на объект ...
но как это сделать?


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

Вот пробую в Automate9, то в нем данная задача решается в одну строку, я не поверю, что AutoIt не сможет аналогично ее решить. Вот код какой Automate9 имеет:
<AMPAUSE ACTION="waitfor" SCALAR="5" />
<AMINTERACT ACTIVITY="press" CHECKOBJECTVALUE="YES" WINDOWCLASS="IEFrame" OBJECTVALUE="http://betsbc.com/left.php?livebet=13105896.357" />
<AMPAUSE ACTION="waitfor" SCALAR="5" />
<AMSHOWDIALOG MESSAGE="ОК" />
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
darow [?]
теперь осталось дело за малым, не можем найти способ, что бы нажать на любую кнопку на этой странице матча
На какие кнопки, может ссылки?
если на ссылки, то у них есть href. Получаете его и делаете _IEnavigate
 

darow

Новичок
Сообщения
50
Репутация
1
я Выше на картинке показал, эти ссылки видно только когда авторизуешься и выглядит она такого типа, меняются только 8 цифр, а после точки всегда постоянна:

http://betsbc.com/left.php?livebet=13116386.357
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Ну вот, задача
darow [?]
не можем найти способ, что бы нажать на любую кнопку на этой странице
решилась. Любая кнопка это ссылка с адресом. Коллекцию ссылок вы получили через _IELinkGetCollection($oIE)
Дальше в проходе по коллекции узнаете $oLink.href



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

А нужные ссылки можно отсеивать по тексту или если интересуют конкретные ссылки содержащие в конце .357, то можно:
1) Фильтровать через регулярное выражение \.357$
2) Искать сразу $oIE.document.querySelectorAll('a[href$=".357"]')
 

darow

Новичок
Сообщения
50
Репутация
1
а подскажите полный код как у вас решилась задача?
а то у нас что-то не решилась:
Код:
Sleep(5000)

$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        If StringInStr($oLink.href, "http://betsbc.com/left.php?livebet=13116506.357") Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            _IEAction($oLink, "click")
            ExitLoop
        EndIf
    Next
EndIf



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

вот такой итог: http://clip2net.com/s/iMl2vn
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Забыли в начале
Код:
#include <ie.au3>
$oIe = _IEAttach('http://betsbc.com/livebetssh.php', 'URL')
If @error Then Exit MsgBox(0,0,'Не открыто')
 

darow

Новичок
Сообщения
50
Репутация
1
Ура наконец-то заработало.
Код:
#include <ie.au3>
$oIe = _IEAttach('http://betsbc.com/livebetssh.php', 'URL')
If @error Then Exit MsgBox(0,0,'Не открыто')


Sleep(5000)

$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        If StringInStr($oLink.href, "http://betsbc.com/left.php?livebet=13121348.314") Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            _IEAction($oLink, "click")
            ExitLoop
        EndIf
    Next
EndIf

только вот один вопрос а как сделать чтобы цифры "13121348" в данном примере заменить на шаблоны? это код конкретного матча, так вот что бы этот скрипт сделать универсальным для всех матчей?


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

вот полный скрипт:
Код:
#include <IE.au3>
Global $sLogin = "g 5627140"
Global $sPassword = "340572"

_IELoadWaitTimeout(10000)
Do
$oIE = _IECreate("http://betsbc.com/")
If @error Then ExitLoop

$oFrame1 = _IEFrameGetCollection($oIE, 0)
If @error Then ExitLoop

For $c = 1 To 5
$oForm = _IETagNameGetCollection($oFrame1, "form", 0)
If @error = 0 Then ExitLoop
Sleep(1000)
Next

$oLogin = _IEGetObjByName($oForm, "login")
_IEFormElementSetValue($oLogin, $sLogin)
If @error Then ExitLoop

$oPassword = _IEGetObjByName($oForm, "pwd")
_IEFormElementSetValue($oPassword, $sPassword)
If @error Then ExitLoop

_IEFormSubmit($oForm, 0)
;If @error Then ExitLoop
Until 1

Sleep(3000)

Global $filename = @ScriptDir & "\find.txt"
_IENavigate($oIE, "http://betsbc.com/live/line.php")

$sMyString = FileRead($filename); читаем весь текст из файла
$oLinks = _IELinkGetCollection($oIE)
If IsObj($oLinks) Then
; дополнительная проверка
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next
EndIf

Sleep(3000)

$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        If StringInStr($oLink.href, "http://betsbc.com/left.php?livebet=13121348.314") Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            _IEAction($oLink, "click")
            ExitLoop
        EndIf
    Next
EndIf
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Замените
Код:
StringInStr($oLink.href, "http://betsbc.com/left.php?livebet=13121348.314")
на
Код:
StringRegExp($oLink.href,'http://betsbc\.com/left\.php\?livebet=\d+\.314')
 

darow

Новичок
Сообщения
50
Репутация
1
Ура весь скрипт готов полностью и работает!
Спасибо всем кто помог это :
- inververs
- alex33
много или мало вы потратили сил, но мне помогли очень хорошо!
мой вопрос в этой теме решен.
 
Верх