Что нового

[Сеть, интернет] Активация ссылки href

ApostolSam

Новичок
Сообщения
6
Репутация
0
У меня такой вопрос: в браузерной игре есть ссылки для выполнения действий! В данном случаи для начала пилообработки.
Вот код фрейма взятый с помощью googlechrom
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /><link href="/css/_buildings.css?20100212" rel="stylesheet" type="text/css" /><link href="/css/city.css?20100220" rel="stylesheet" type="text/css" /><!--[if lte IE 6]><style>img {behavior: url(/css/png2.htc?20090601) }</style><![endif]--></head> 
<body scroll="no"class="textM"> 
<script src="/js/_jquery.js?20090325"></script> 
<script src="/js/20100903/_building/"></script> 
<script src="/js/20100615/weap/"></script> 
<script src="/js/show_hide.js?v5"></script> 
<script src="/js/_ui.js"></script> 
<script src="/js/stock.js?20090605"></script> 
 
<script language="JavaScript">top.user.setMoney(0.05,699.39);top.user.setMassa(167,355);
var bPlace="sawmill-1",bName="sawmill",menu=[["mode=main&ocache=", "Деревообработка", 1],["", ""],["mode=sell&ocache=", "Продать ресурсы", 0],["mode=buy&ocache=", "Купить ресурсы", 0],["", ""],["-", "Биржа", 0],["mode=alltypes", "Поиск товаров", ],["mode=store", "Склад Вещей<span id='span_storecount'></span>", ],["mode=useritems", "Выставить лот", ],["-",""],["-", "Мои операции", 0],["mode=getmylots", "Выставленные лоты", ],["mode=history", "История сделок", ]],Msg="",bHTML="
<b>Эзацевое полено</b> (4 шт.) -&raquo; <a href=\"/map.php?action=mod&id=76167837&ocache=&w_id=162&v=1284492257&key=MzBiODI4Mjg2NjMxMzAzYmE4NTk4YTc0NGFkMTBjNWE6MTI4NDQ5MjI1NzE=\" onclik=\"this.href+=\'&sub=393336\';\" name=\"ca9ab871\"class=\"cs\"><b>Эзацевое топорище</b></a>, <a href=\"/map.php?action=mod&id=76167837&w_id=202&ocache=&v=1284492257&key=MzBiODI4Mjg2NjMxMzAzYmE4NTk4YTc0NGFkMTBjNWE6MTI4NDQ5MjI1NzE=\" onclik=\"this.href+=\'&sub=149276\';\" name=\"9ea6d23c\"class=\"cs\"><b>Эзацевая рукоять</b></a>";
bots = [];CurLotsMass=0; scroll0=true; MaxLotsMass=89; showMirkaAdv=true;_genBuildingHTML();
 
NPCData=[];NPCHtml();</script>top.user.setMoney(0.05,699.39);top.user.setMassa(167,355);
var bPlace="sawmill-1",bName="sawmill",menu=[["mode=main&ocache=", "Деревообработка", 1],["", ""],["mode=sell&ocache=", "Продать ресурсы", 0],["mode=buy&ocache=", "Купить ресурсы", 0],["", ""],["-", "Биржа", 0],["mode=alltypes", "Поиск товаров", ],["mode=store", "Склад Вещей<span id='span_storecount'></span>", ],["mode=useritems", "Выставить лот", ],["-",""],["-", "Мои операции", 0],["mode=getmylots", "Выставленные лоты", ],["mode=history", "История сделок", ]],Msg="",bHTML="
<b>Эзацевое полено</b> (4 шт.) -&raquo;[color=green]<a href=\"/map.php?action=mod&id=76167837&ocache=&w_id=162&v=1284492257&key=MzBiODI4Mjg2NjMxMzAzYmE4NTk4YTc0NGFkMTBjNWE6MTI4NDQ5MjI1NzE=\" onclik=\"this.href+=\'&sub=393336\';\" name=\"ca9ab871\"class=\"cs\"><b>Эзацевое топорище</b></a>[/color], <a href=\"/map.php?action=mod&id=76167837&w_id=202&ocache=&v=1284492257&key=MzBiODI4Mjg2NjMxMzAzYmE4NTk4YTc0NGFkMTBjNWE6MTI4NDQ5MjI1NzE=\" onclik=\"this.href+=\'&sub=149276\';\" name=\"9ea6d23c\"class=\"cs\"><b>Эзацевая рукоять</b></a>";
bots = [];CurLotsMass=0; scroll0=true; MaxLotsMass=89; showMirkaAdv=true;_genBuildingHTML();
 
NPCData=[];NPCHtml();</script>

Нужно начать изготовление эзацевого топорища.
Искомая строка, как я понял

Код:
<a href=\"/map.php?action=mod&id=76167837&ocache=&w_id=162&v=1284492257&key=MzBiODI4Mjg2NjMxMzAzYmE4NTk4YTc0NGFkMTBjNWE6MTI4NDQ5MjI1NzE=\" onclik=\"this.href+=\'&sub=393336\';\" name=\"ca9ab871\"class=\"cs\"><b>Эзацевое топорище</b></a>

При этом выделенная часть постоянно меняется:

<a href="/map.php?action=mod&amp;id=76167837&amp;ocache=&amp;w_id=162&amp;v=1284492181&amp;key=MTgxODljMjI1NjI3YzRhOWVhNDNhZGIzMzYwMzNhZWI6MTI4NDQ5MjE4MTM="

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

axlwor

Скриптер
Сообщения
657
Репутация
147
Код:
#include <IE.au3>

Global $hwnd = WinGetHandle('[CLASS:IEFrame]')
Global $oIE = _IEAttach ($hwnd,'HWND')

Global $oTemps = _IETagNameGetCollection ($oIE, "a")

For $oTemp In $oTemps
	If $oTemp.innerText == "Эзацевое топорище" Then
		_IEAction ($oTemp, "click")
		ExitLoop
	EndIf
Next
 
Автор
A

ApostolSam

Новичок
Сообщения
6
Репутация
0
К сожалению данный код программы не подошел. Расскажу что делал и что получилось в итоге
Слегка измененный вид программы

Код:
#include <IE.au3>

Global $hwnd = WinGetHandle('[CLASS:IEFrame]')
MsgBox(1,1,$hwnd,0)
Global $oIE = _IEAttach ($hwnd,'HWND')

Global $oTemps = _IETagNameGetCollection ($oIE, "a")
MsgBox(1,1,$oTemps,0)

For $oTemp In $oTemps
    If $oTemp.innerText == "Эзацевое топорище" Then
        _IEAction ($oTemp, "click")
        ExitLoop
    EndIf
Next


1. Запустил IE и зашел в игру.
2. Свернул браузер и запустил программу
3. первое собщение 0x000708A8
4. Второе сообщение пустое. Обработка не начата.

Вот дополнительно код программы для автоматического захода в игру
Код:
#include <Inet.au3>
#include <IE.au3>

HotKeySet('!x', 'term')
HotKeySet("{PAUSE}", "Pause1")

Global $oIE,$Paused

$oIE     = _IECreate("http://ereality.ru",0,1,1)
$oForm   = _IEFormGetObjByName($oIE,"login")
$oLogin  = _IEFormElementGetObjByName($oForm,"login")
$oPass   = _IEFormElementGetObjByName($oForm,"pass")
_IEFormElementSetValue($oLogin,"Логин")
_IEFormElementSetValue($oPass,"Пароль")
_IEFormSubmit($oForm,1)

func term()
	exit
endfunc

Func Pause1()
	 $Paused = NOT $Paused
    While $Paused
		sleep(100)
        ToolTip('Кликер на паузе',0,0)
	WEnd
    ToolTip("")
EndFunc


Возможно я просто неправильно пользуюсь вашим кодом. Если "да" - то подскажите пожалуйста как необходимо.
Также возможно не хватает первоначальных данных. Тогда подскажите что необходимо, и если можно, то как лучше эти данные получить и предоставить.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
После логина нужно оставить только
Код:
$oTemps = _IETagNameAllGetCollection ($oIE, "a")

If @error = 0 Then
	MsgBox(0,0, "Найдено " & @extended & " элементов", 20)
EndIf

For $oTemp In $oTemps
    If $oTemp.innerText == "Эзацевое топорище" Then
        _IEAction ($oTemp, "click")
        ExitLoop
    EndIf
Next


то есть..
в начале бота
Код:
HotKeySet("Твой_батон", "_Click1")


после логина
Код:
While 1
	Sleep(1000)
WEnd


И где нибудь саму функцию
Код:
Func _Click1()
$oTemps = _IETagNameAllGetCollection ($oIE, "a")

If @error = 0 Then
	MsgBox(0,0, "Найдено " & @extended & " элементов", 20)
EndIf

For $oTemp In $oTemps
    If $oTemp.innerText == "Эзацевое топорище" Then
        msgbox(0,"Alarm", "Счаз ударю")
        _IEAction ($oTemp, "click")
        Return
    EndIf
Next
EndFunc


Запустились. Залогинились. Ждем... Хрясь по своему батону... Если все нормально, то должен msgbox показаться.. Тут ты сам думай или продолжать работу или терминалить
 
Автор
A

ApostolSam

Новичок
Сообщения
6
Репутация
0
Скорректировал программу в соответствии с указаниями получил следующее
Код:
#include <Inet.au3>
#include <IE.au3>

HotKeySet('!x', 'term')
HotKeySet("{PAUSE}", "Pause1")
HotKeySet("!c", "_Click1")

Global $oIE,$Paused

$oIE     = _IECreate("http://ereality.ru",0,1,1)
$oForm   = _IEFormGetObjByName($oIE,"login")
$oLogin  = _IEFormElementGetObjByName($oForm,"login")
$oPass   = _IEFormElementGetObjByName($oForm,"pass")
_IEFormElementSetValue($oLogin,"Логин")
_IEFormElementSetValue($oPass,"Пароль")
_IEFormSubmit($oForm,1)

func term()
	exit
endfunc

Func Pause1()
	 $Paused = NOT $Paused
    While $Paused
		sleep(100)
        ToolTip('Кликер на паузе',0,0)
	WEnd
    ToolTip("")
EndFunc

While 1
    Sleep(1000)
WEnd

Func _Click1()
$oTemps = _IETagNameAllGetCollection ($oIE, "a")

If @error = 0 Then
    MsgBox(0,0, "Найдено " & @extended & " элементов", 20)
EndIf

For $oTemp In $oTemps
    If $oTemp.innerText == "Эзацевое топорище" Then
        msgbox(0,"Alarm", "Счаз ударю")
        _IEAction ($oTemp, "click")
        Return
    EndIf
Next
EndFunc


Результат:
1. Первое сообщение "Найдено 812 элементов"
2. Второго сообщения нет и обработка не начинается.
 
Автор
A

ApostolSam

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

axlwor

Скриптер
Сообщения
657
Репутация
147
Как я видел часть кода нужно по фреймам бегать. Видел фрейм "main". Топора нигде не видел. Ставь debugbar и работай с ним
читай
Код:
_IEFrameGetObjByName
 
Автор
A

ApostolSam

Новичок
Сообщения
6
Репутация
0
Урааа!! Смог кое что активировать. Вот код программы которая получилась
Код:
#include <Inet.au3>
#include <IE.au3>

HotKeySet('!x', 'term')
HotKeySet("{PAUSE}", "Pause1")
HotKeySet("!c", "_LinksClick")

Global $oIE,$Paused

$oIE     = _IECreate("http://ereality.ru",0,1,1)
$oForm   = _IEFormGetObjByName($oIE,"login")
$oLogin  = _IEFormElementGetObjByName($oForm,"login")
$oPass   = _IEFormElementGetObjByName($oForm,"pass")
_IEFormElementSetValue($oLogin,"Логин")
_IEFormElementSetValue($oPass,"Пароль")
_IEFormSubmit($oForm,1)

func term()
	exit
endfunc

Func Pause1()
	 $Paused = NOT $Paused
    While $Paused
		sleep(100)
        ToolTip('Кликер на паузе',0,0)
	WEnd
    ToolTip("")
EndFunc

While 1
    Sleep(1000)
WEnd

Func _LinksClick()
    $oFrame = _IEFrameGetObjByName($oIE, "main")
	MsgBox(1,1,1,0)
    $oLinks = _IELinkGetCollection($oFrame)
	MsgBox(1,1,2,0)
        For $oLink in $oLinks
			$sLinkText = _IEPropertyGet($oLink, "innerText")
            If StringInStr($sLinkText, "Тильевое полено") Then
            _IEAction($oLink, "click")
            ExitLoop
            EndIf
        Next
    _IELoadWait($oFrame)
EndFunc


Осталась только маленькая проблема. При первых использования почему то активировался DownloadMaster и попробовал скачать файл по ссылке. Пока буду юзать и проверять. Как только удостоверюсь в работоспособности без скачки файла отмечу как решенное.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
все функции убери за основной код,
в коде оставь
Код:
#include
HotKeySet
Global
Что то что должно выполниться перед работой скрипта
;основной код скрипта, который большее время ждем чего-то
while 1
if then
endif
sleep(100)
wend
exit

func One()
endfunc

func Two()
endfunc


А даунлоад у тебя настроен для загрузки с ИЕ? стартует ИЕ, стартуют все остальные завязанные на него тулбары и остальное
 
Автор
A

ApostolSam

Новичок
Сообщения
6
Репутация
0
Нашел закономерность, когда выскакивает данлоад.
Если запустить скрипт, после загрузки переходить по ссылкам и вернуться в нужную, а затем запустить функцию клик он тут же выскакивает. Если загружается сразу нужная, то все путем (пока путем). Юзаю, проверяю.


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

Данлоад начинает закачивать из-за следующего:
В меню настройки пункт интеграция стоит по умолчанию галочка на "Использовать клавиши Alt и Ctrl при кликах на ссылках в браузере"! А так ка горячая клавиша для запуска ссылки Alt + c то он и запускается. Вот так.!! :smile:

Ну думаю данную тему можно считать решенной!! Всем кто помогал огромное спасибо! И плюсик за помощь!!
 
Верх