Что нового

Как научить скрипт выбрать нужный вариант нажатия кнопки

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(2000)

Global $filename = @ScriptDir & "\find.txt"
$hFile = FileOpen($filename, 0)
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть данный файл")
    Exit
EndIf
_IENavigate($oIE, "http://betsbc.com/live/line.php")

$sLine = FileReadLine($hFile, -1)
If @error = -1 Then
    MsgBox(4096, "Ошибка", "Не вышло прочитать данные")
    Exit
EndIf
Sleep(2000)

FileClose($hFile)

$sMyString=StringRegExpReplace($sLine, ".*?В матче среди: (.*?) .*", "\1", 0)
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next

Sleep(2000)

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

т.е. скрипт октрывает страницу, авторизуется, считывает с текстовика какой матч ему открыть, заходит в список матчей, открывает нужный матч и нажимает на кнопку согласно ее кода, который прописан в скрипте.
Но вот задачка: нужно чтобы скрипт из текстовика в котором выбирал какой нужно матч открыть "выбрал" на какую ему нужно кнопку нажать. Вообще существует 6 вариантов этих кнопок, скрипту надо выяснить по текстовику который из 6 вариантов нужен. А это можно выяснить по записи: "Коэффициент 2 упал меньше указанного значения" и по записи "Счет: 0:0"...
Подскажите какой же метод лучше применить в данной ситуации?
Текстовик и скрин кнопок вкладываю.
Заранее спасибо за ответы
 

Вложения

  • find.txt
    2.2 КБ · Просмотры: 8
  • 2222.jpg
    2222.jpg
    91.9 КБ · Просмотры: 23
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
что же никто не может подмочь?



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

может применить метод сравнения?:
- если Счёт: 0:0 и коэфф = 2, тогда нажать кнопку .314
- если Счёт: 0:0 и коэфф = 1, тогда нажать кнопку .313
и так еще 4 раза?
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Чем дольше смотрю - тем меньше понимаю. Чего надо добиться в итоге? :stars:
Скрипт считывает последнюю строку txt, находит эту ссылку, заходит по ней. Это все работает. Получаем окно как на скрине. А дальше сплошные вопросы.

Куда тут надо ткнуть? Почему при 0:0 и к=2 надо жать на .314 (к стати, где это?) и при 0:0 и к=1 жать на .313 (опять же, это куда?) И какие остальные 4 варианта?
Наверное есть какая-то логика, но я ее в упор не вижу
 
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
Чем дольше смотрю - тем меньше понимаю. Чего надо добиться в итоге? :stars:
Нужно в итоге добиться, чтобы бот считал с TXT строку и понял на какую из 6 кнопок нужно нажать
(сейчас я ему в ручную "помогаю" - прямо в скрипт вбиваю код кнопки)

Скрипт считывает последнюю строку txt, находит эту ссылку, заходит по ней. Это все работает. Получаем окно как на скрине. А дальше сплошные вопросы.

Куда тут надо ткнуть? Почему при 0:0 и к=2 надо жать на .314 (к стати, где это?) и при 0:0 и к=1 жать на .313 (опять же, это куда?) И какие остальные 4 варианта?
я просмотрел все коды 6 кнопок:
1 сет: 1- *.313 2- *.314
2 сет: 1- *.356 2- *.357
3 сет: 1- *.1 2- *.2
Наверное есть какая-то логика, но я ее в упор не вижу

может я действительно плохо пояснил...
задайте по одному вопросы я все разверну


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

Алгоритм работы бота такой:
Условие:
-есть страница сайта на котором есть 6 кнопок
Задача:
- согласно строки в текстовом файле(это так расписывается сигнал боту) нажать на нужную кнопку

Работа бота:
- считывает строку сначала фамилию и открывает по ней нужный матч
- в этом матче есть 6 кнопок
- бот считывает условия в строке дальше: это какой коэффициент и какой Счет сейчас идет и по этим двум показателям решает какую кнопку из 6 нажать
- после определения кода кнопки жмет на нее
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
darow [?]
- бот считывает условия в строке дальше: это какой коэффициент и какой Счет сейчас идет и по этим двум показателям решает какую кнопку из 6 нажать
И как он это определяет? Какая там логика?
 
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
- если Счёт: 0:0 и коэфф = 2, тогда нажать кнопку .314
- если Счёт: 0:0 и коэфф = 1, тогда нажать кнопку .313
- если Счёт: 1:0(или 0:1) и коэфф = 2, тогда нажать кнопку .357
- если Счёт: 1:0(или 0:1) и коэфф = 1, тогда нажать кнопку .356
- если Счёт: 1:1 и коэфф = 2, тогда нажать кнопку .2
- если Счёт: 1:1 и коэфф = 1, тогда нажать кнопку .1

вот так он должен бы определять
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Ну если все так просто, тогда простым сравнением, да. Почему бы и нет.
Код:
;$sLine = "20:00:43|В матче среди: Халл - Кухарчук Н.|Коэффициент 2 упал меньше указанного значения!|Счет: 0:0"
$K = StringRegExpReplace($sLine, ".*циент\s(\d).*", "$1")
$Stand = StringRegExpReplace($sLine, ".*чет.+?(\d.*)", "$1")

If $K = 2 And $Stand = "0:0" Then 
	$Btn = ".314"
ElseIf $K = 1 And $Stand = "0:0" Then 
	$Btn = ".313"
ElseIf $K = 2 And ($Stand = "1:0" OR $Stand = "0:1") Then 
	$Btn = ".357"	
ElseIf $K = 1 And ($Stand = "1:0" OR $Stand = "0:1") Then 
	$Btn = ".356"
ElseIf $K = 2 And $Stand = "1:1" Then 
	$Btn = ".2"	
ElseIf $K = 1 And $Stand = "1:1" Then 
	$Btn = ".1"	
Else
	$Btn = "Undefined"
EndIf

ConsoleWrite('->' & $Btn & @CRLF)
 
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
ок сейчас попробую внедрить в скрипт...


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

все работает но до нажатия кнопки...
Кстати нажатие кнопки в скрипте работает так:
Код:
$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        If StringRegExp($oLink.href,'http://betsbc\.com/left\.php\?livebet=\d+\.357') Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            _IEAction($oLink, "click")
            ExitLoop
        EndIf
    Next
EndIf


а как в Вашем примере это записать?
 

Dm666

Осваивающий
Сообщения
221
Репутация
48
Там тогда В IF-ах кавычки надо убрать. Вот так будет выглядить кусок после последнего Sleep(2000)
Код:
Sleep(2000)
$K = StringRegExpReplace($sLine, ".*циент\s(\d).*", "$1")
$Stand = StringRegExpReplace($sLine, ".*чет.+?(\d.*)", "$1")

If $K = 2 And $Stand = "0:0" Then 
	$Btn = 314
ElseIf $K = 1 And $Stand = "0:0" Then 
	$Btn = 313
ElseIf $K = 2 And ($Stand = "1:0" OR $Stand = "0:1") Then 
	$Btn = 357	
ElseIf $K = 1 And ($Stand = "1:0" OR $Stand = "0:1") Then 
	$Btn = 356
ElseIf $K = 2 And $Stand = "1:1" Then 
	$Btn = 2	
ElseIf $K = 1 And $Stand = "1:1" Then 
	$Btn = 1	
Else
	$Btn = "Undefined"
EndIf

ConsoleWrite('->' & $Btn & @CRLF)

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


У меня вроде работает...
 
Автор
D

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(2000)

Global $filename = @ScriptDir & "\find.txt"
$hFile = FileOpen($filename, 0)
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть данный файл")
    Exit
EndIf
_IENavigate($oIE, "http://betsbc.com/live/line.php")
Sleep(1000)

$sLine = FileReadLine($hFile, -1)
If @error = -1 Then
    MsgBox(4096, "Ошибка", "Не вышло прочитать данные")
    Exit
EndIf
Sleep(1000)

FileClose($hFile)

$sMyString=StringRegExpReplace($sLine, ".*?В матче среди: (.*?) .*", "\1", 0)
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next



Sleep(2000)
$K = StringRegExpReplace($sLine, ".*циент\s(\d).*", "$1")
$Stand = StringRegExpReplace($sLine, ".*чет.+?(\d.*)", "$1")

If $K = 2 And $Stand = "0:0" Then
    $Btn = 314
ElseIf $K = 1 And $Stand = "0:0" Then
    $Btn = 313
ElseIf $K = 2 And ($Stand = "1:0" OR $Stand = "0:1") Then
    $Btn = 357
ElseIf $K = 1 And ($Stand = "1:0" OR $Stand = "0:1") Then
    $Btn = 356
ElseIf $K = 2 And $Stand = "1:1" Then
    $Btn = 2
ElseIf $K = 1 And $Stand = "1:1" Then
    $Btn = 1
Else
    $Btn = "Undefined"
EndIf

ConsoleWrite('->' & $Btn & @CRLF)

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


вы не поверите но похоже получилось!!!
 
Автор
D

darow

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

и напоследок, после нажатия открывается в ИЕ9 отдельная вкладка такого вида во вложении...
как туда поставить курсор набрать цифры и нажать Ентер...
просто горячими клавишами в это поле можно поставить если 7 раз нажать Таб...
может проще есть метод?
заранее спасибо за ответ
 

Вложения

  • 5555555555555.jpg
    5555555555555.jpg
    33.5 КБ · Просмотры: 14

Dm666

Осваивающий
Сообщения
221
Репутация
48
Чуть изменим последний кусок от ConsoleWrite('->' & $Btn & @CRLF)
Код:
$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
        If StringRegExp($oLink.href,'http://betsbc\.com/left\.php\?livebet=\d+\.'&$Btn) Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            $AttachLink = $oLink.href
            _IEAction($oLink, "click")
            ExitLoop
        EndIf
    Next
EndIf

Sleep(3000)

$oIE = _IEAttach($AttachLink, "URL")
$Bet=1 ; Ставка
$oForm = _IEFormGetCollection ($oIE, 0)
$oQuery = _IEFormElementGetCollection ($oForm, 0)
_IEFormElementSetValue ($oQuery, $Bet)
_IEFormSubmit ($oForm)

Уверен что это можно провернуть намного изящнее. Но во-первых я не особо дружу с IE.au3, а во-вторых оно работает ;)
 
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
у меня немного не выходит
Код:
#include <IE.au3>
Global $filename = "C:\Users\Арсений\Desktop\betcityru\signals.txt"

Local $time1, $time2
$time1 = FileGetTime($filename, 0, 1)
While 1
    $time2 = FileGetTime($filename, 0, 1)
    If $time1 <> $time2 Then
        $time1 = $time2
        _action1()
    EndIf
    Sleep(1000)
WEnd

Func _action1()

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(5000)

Global $filename = "C:\Users\Арсений\Desktop\betcityru\signals.txt"
$hFile = FileOpen($filename, 0)
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть данный файл")
    Exit
EndIf
_IENavigate($oIE, "http://betsbc.com/live/line.php")

$sLine = FileReadLine($hFile, -1)
If @error = -1 Then
    MsgBox(4096, "Ошибка", "Не вышло прочитать данные")
    Exit
EndIf
Sleep(2000)

FileClose($hFile)

$sMyString=StringRegExpReplace($sLine, ".*?В матче среди: (.*?) .*", "\1", 0)
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next

Sleep(2000)

$K = StringRegExpReplace($sLine, ".*циент\s(\d).*", "$1")
$Stand = StringRegExpReplace($sLine, ".*чет.+?(\d.*)", "$1")

If $K = 2 And $Stand = "0:0" Then
    $Btn = 314
ElseIf $K = 1 And $Stand = "0:0" Then
    $Btn = 313
ElseIf $K = 2 And ($Stand = "1:0" OR $Stand = "0:1") Then
    $Btn = 357
ElseIf $K = 1 And ($Stand = "1:0" OR $Stand = "0:1") Then
    $Btn = 356
ElseIf $K = 2 And $Stand = "1:1" Then
    $Btn = 2
ElseIf $K = 1 And $Stand = "1:1" Then
    $Btn = 1
Else
    $Btn = "Undefined"
EndIf

ConsoleWrite('->' & $Btn & @CRLF)

$oLinks = _IETagNameGetCollection($oIE, "a")
If IsObj($oLinks) Then
    For $oLink In $oLinks
;~     ConsoleWrite('2->' &  2& @CRLF)
        If StringRegExp($oLink.href,'http://betsbc\.com/left\.php\?livebet=\d+\.'&$Btn) Or StringInStr($oLink.getAttribute('onclick'), 'return al();') Then
            ConsoleWrite("href: "&$oLink.href&@CRLF)
            _IEAction($oLink, "click")
			Sleep(5000)
			Local $oIE2 = _IEAttach($AttachLink, "URL")
$Bet=133 ; Ставка
            $oForm = _IEFormGetCollection ($oIE2, 0)
$oQuery = _IEFormElementGetCollection ($oForm, 0)
_IEFormElementSetValue ($oQuery, $Bet)
_IEFormSubmit ($oForm)
Sleep(5000)
            WinClose("[CLASS:IEFrame]")
            ExitLoop
        EndIf
    Next
EndIf
EndFunc


пытаюсь в финальный вариант с циклом вставить и выкидывает ошибку в строке
Код:
Local $oIE2 = _IEAttach($AttachLink, "URL")
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
про строку
Код:
$AttachLink = $oLink.href

мы зобыли
Точнее ты забыл её скопировать.
 
Автор
D

darow

Новичок
Сообщения
50
Репутация
1
Точно всем спасибо вопрос решен!!!
 
Верх