Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
DENoszone
10-03-2008, 18:14
а может эта программа производить поиск по брауеру по открытой странице и нажимать на определыные фразы?
как добавить в скрипт что бы нажималась "Page Down"
Maza Faka, как сделать что бы последний клик в цикле все время изменялся +10 по Х
Maza Faka
11-03-2008, 07:14
а может эта программа производить поиск по брауеру по открытой странице и нажимать на определыные фразы? »
Смотри в справке функцию _IELinkClickByText().
как добавить в скрипт что бы нажималась "Page Down" »
Send("{PGDN}")
как сделать что бы последний клик в цикле все время изменялся +10 по Х »
Если я правильно тебя понял:
Opt("MouseClickDelay", 50) ;Задаём паузу между кликами мыши в 50 милисекунд
HotKeySet("{Esc}", "_Exit") ;задаём горячую клавишу (Escape) для завершения скрипта
Dim $plus = 0
Global $aMousePos[11][2] ;создаём двумерный массив
$aMousePos[0][0] = 10 ;указываем кол-во элементов
;Заполняем 0 размерность Х-координатами
$aMousePos[1][0] = 100
$aMousePos[2][0] = 200
$aMousePos[3][0] = 300
$aMousePos[4][0] = 400
$aMousePos[5][0] = 500
$aMousePos[6][0] = 600
$aMousePos[7][0] = 700
$aMousePos[8][0] = 800
$aMousePos[9][0] = 900
$aMousePos[10][0] = 1000
;Заполняем 1 размерность Y-координатами
$aMousePos[1][1] = 50
$aMousePos[2][1] = 100
$aMousePos[3][1] = 150
$aMousePos[4][1] = 200
$aMousePos[5][1] = 250
$aMousePos[6][1] = 300
$aMousePos[7][1] = 350
$aMousePos[8][1] = 400
$aMousePos[9][1] = 450
$aMousePos[10][1] = 500
;запускаем цикл
While 1
For $i = 1 To $aMousePos[0][0]
If $i = 10 Then
$plus += 10
MouseClick("left", $aMousePos[$i][0] + $plus, $aMousePos[$i][1]) ;последний клик в цикле все время изменяется +10 по Х
ContinueLoop
EndIf
MouseClick("left", $aMousePos[$i][0], $aMousePos[$i][1]) ;кликаем в 10 разных местах
Next
MouseClick("left", 10, 10, 1, 50) ;потом ещё в 1 месте :)
Sleep(50)
WEnd
Func _Exit()
$aMousePos = 0
Exit
EndFunc
DENoszone
11-03-2008, 23:13
я уже наверное достал.но не как не могу понять как это все работает =((
1. как кликать в браузере по определеному тексту "Нажми сюда"
2. Как можно копировать title сайта и вставлять на другой сайт в форму поиска.
3. Как обновлять страницу? браузер.
4. можно начинать цикл только когда сайт полностью заргружен или на 90% ?
5. есть какой то норм мануал русский по этой проге?
заранее спасибо
prokazzza
12-03-2008, 00:41
Maza Faka, Надеюсь, что Creat0R не обидится, если отвечу я »
Все работает, но мне не нужно окно, с надписью о том что библиотека загрегина, я бы мог воспользоваться батником.Есть решения этого???
HORRIBLE
12-03-2008, 00:41
DENoszone,
1. как кликать в браузере по определеному тексту "Нажми сюда"
#include <IE.au3>
$oIE = _IECreate ("http://forum.oszone.net" )
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Автоматическая установка приложений >>",3)
_IELinkClickByText ($oIE, "Автоматическая установка приложений")
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << AutoIt скрипты .:[общие вопросы]:. >>",3)
_IELinkClickByText ($oIE, "AutoIt скрипты .:[общие вопросы]:.")
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Последняя » >>",3)
_IELinkClickByText ($oIE, "Последняя »")
2. Как можно копировать title сайта и вставлять на другой сайт в форму поиска.
#include <IE.au3>
$oIE = _IECreate ("http://forum.oszone.net" )
_IELoadWait ($oIE)
MsgBox(0, "<title> сайта", _IEPropertyGet ($oIE,"title")) ;title форума
$oIE_2 = _IECreate ("http://www.yandex.ru")
_IELoadWait ($oIE_2)
$oForm = _IEFormGetObjByName ($oIE_2, 0)
$oQuery = _IEFormElementGetObjByName ($oForm, 0)
_IEFormElementSetValue ($oQuery, _IEPropertyGet ($oIE,"title"))
_IEFormSubmit ($oForm)
3. Как обновлять страницу? браузер.
_IEAction ($oIE, "refresh")
4. можно начинать цикл только когда сайт полностью заргружен.
_IELoadWait ($oIE) ;ждем пока все не загрузится, после чего работаем дальше.
DENoszone
12-03-2008, 01:07
Блин. как научится работать с этой программой?=(
а то стыдно уже тут спрашивать.
#include <IE.au3> $oIE = _IECreate ("http://forum.oszone.net" ) _IELoadWait ($oIE) MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Автоматическая установка приложений >>",3) _IELinkClickByText ($oIE, "Автоматическая установка приложений") _IELoadWait ($oIE) MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << AutoIt скрипты .:[общие вопросы]:. >>",3) _IELinkClickByText ($oIE, "AutoIt скрипты .:[общие вопросы]:.") _IELoadWait ($oIE) MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Последняя » >>",3) _IELinkClickByText ($oIE, "Последняя »")
как из этого сделать цикл?
#include <IE.au3> $oIE = _IECreate ("http://forum.oszone.net" ) _IELoadWait ($oIE) MsgBox(0, "AddressBar Status", _IEPropertyGet ($oIE,"title")) ;title форума $oIE_2 = _IECreate ("http://www.yandex.ru") _IELoadWait ($oIE_2) $oForm = _IEFormGetObjByName ($oIE_2, 0) $oQuery = _IEFormElementGetObjByName ($oForm, 0) _IEFormElementSetValue ($oQuery, _IEPropertyGet ($oIE,"title")) _IEFormSubmit ($oForm)
это классно...но билн даже не могу сделать что бы загружалась страница с таитлом...потом в другой сайт куда в писывает title вписывало и переходило обратно на сайт с title и обновлял её....опять брал title и шел в писывал в сайт.
понятно?=)
HORRIBLE
12-03-2008, 01:17
$oFrames = _IEFrameGetCollection ($oIE)
$iNumFrames = @extended
For $i = 0 to ($iNumFrames - 1)
local $oFrame = _IEFrameGetCollection ($oIE, $i)
_IELoadWait ($oFrame)
next
Это взято из примера, ожидаем пока на страничке загрузятся все фрэймы, проблема вот в чем, иногда бывает так, что при работе этой части, во время ожидания, страничка может вылететь на главную или ее вооще могут закрыть, из за этого вылазит ошибка которая прекращает дальнейшее выполнение программы, возможно ли это как нибуть исправить чтоб ошибки не было , а просто шла далее.....
и еще одно, я наверно что то не так делаю. Не получается скопировать, что угодно со странички если использовать ClipPut(""), как тогда быть, если мне перед выполнением необходимо его все таки почистить ?
вот есть
ClipPut("")
$start_2 = "Этаж 1"
_WaitLoad();ожидание загрузки
MouseClickDrag("left", 972, 168, 1178,168)
ControlSend("title","","","{Ctrl}+{C}") <-- это правильно написано?
;ControlSend("title","","[Class: Internet Explorer_Server; Instance:1]","{Ctrl}+{C}") <--или это?
;Send("^{c}")
;обрезаем излишки скопированного слова........
$len_start_2 = StringLen($start_2)
$len_Clip_2 = StringLen(ClipGet())
$len_Clip_sum_2 = Abs($len_Clip_2 - $len_start_2)
$result_start_2 = StringTrimRight(ClipGet(), $len_Clip_sum_2)
$compare_2=StringCompare ( $result_start_2, $start_2, 2)
if $compare_2 = 0 then
exit
endif
Спасибо.
prokazzza,
мне не нужно окно, с надписью о том что библиотека загрегина
regsvr32.exe /?
Использование: regsvr32 [/u] [/s] [/n] [/i[:строка_команд]] DLL-файл
/u - Отменяет регистрацию DLL
/s - "Тихий" режим; окна сообщения не отображаются
/i - Вызывает DllInstall, передавая параметром необязательную строку_команд,
при использовании с ключом /u вызывает DllUnInstall
/n - Не вызывает DllRegisterServer; это может использоваться с ключом /i
Соответственно:
Run(@SystemDir & '\regsvr32.exe /s "' & @ScriptDir & '\Test.dll"')
:)
DENoszone
12-03-2008, 08:28
#include <IE.au3>
While 1
#include <IE.au3>
$oIE = _IECreate ("http://www.old-school.ru" )
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Всем любителям проходить тест >>",3)
_IELinkClickByText ($oIE, "Всем любителям проходить тест")
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Пригласить в группу >>",3)
_IELinkClickByText ($oIE, "Пригласить в группу")
_IELoadWait ($oIE)
MsgBox(0,_IEPropertyGet ($oIE,"title"),"Кликаем по: << Начать поиск » >>",3)
_IELinkClickByText ($oIE, "Начать поиск »")
wend
вот по пытался.
не фига не вышло.
КАК отметить галочку? она единственая на странице
Возник вопрос о сохранении - загрузке данных. Имеется скрипт, кончено же с туевой хучей данных-переменных. После его завершения требуется сохранить все установки, до след сеанса работы, в котором конечно прочитать их. Данные эти весьма разнородны, от переменных до состояния чекбоксов. Что посоветуете коллеги?!
Maza Faka
12-03-2008, 11:37
NikLok
Сохраняй в *.ini файле, либо, если данных очень много - в реестре.
Maza Faka, Можно примерчик кода небольшой ! Я просто как подумаю о синтаксическом анализе и т.п. :o
Maza Faka
12-03-2008, 15:51
Можно примерчик кода небольшой »
Что-то вроде этого:
#include <GuiConstants.au3>
Global $CfgFile = @ScriptDir & "\Config.ini"
Global $Input_State = IniRead($CfgFile, "Settings", "Input", "")
Global $Radio1_State = IniRead($CfgFile, "Settings", "Radio1", 4)
Global $Radio2_State = IniRead($CfgFile, "Settings", "Radio2", 4)
Global $CheckBox1_State = IniRead($CfgFile, "Settings", "CheckBox1", 4)
Global $CheckBox2_State = IniRead($CfgFile, "Settings", "CheckBox2", 4)
$hGUI = GUICreate("Test GUI", 320, 240)
$hInput = GUICtrlCreateInput("", 10, 10, 160, 20)
GUICtrlSetData(-1, $Input_State)
GUICtrlCreateGroup("Group", 10, 50, 160, 100)
$Radio1 = GUICtrlCreateRadio("Radio1", 20, 75, 60, 16)
GUICtrlSetState(-1, $Radio1_State)
$Radio2 = GUICtrlCreateRadio("Radio2", 20, 120, 60, 16)
GUICtrlSetState(-1, $Radio2_State)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$CheckBox1 = GUICtrlCreateCheckbox("Param 1", 200, 75, 60, 20)
GUICtrlSetState(-1, $CheckBox1_State)
$CheckBox2 = GUICtrlCreateCheckbox("Param 2", 200, 120, 60, 20)
GUICtrlSetState(-1, $CheckBox2_State)
$AcceptButton = GUICtrlCreateButton("Ok", 10, 200, 60, 25)
$CancelButton = GUICtrlCreateButton("Cancel", 250, 200, 60, 25)
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $CancelButton
ExitLoop
Case $AcceptButton
_SaveCfg()
ExitLoop
EndSwitch
WEnd
Func _SaveCfg()
IniWrite($CfgFile, "Settings", "Input", GUICtrlRead($hInput))
IniWrite($CfgFile, "Settings", "Radio1", GUICtrlRead($Radio1))
IniWrite($CfgFile, "Settings", "Radio2", GUICtrlRead($Radio2))
IniWrite($CfgFile, "Settings", "CheckBox1", GUICtrlRead($CheckBox1))
IniWrite($CfgFile, "Settings", "CheckBox2", GUICtrlRead($CheckBox2))
EndFunc
Maza Faka, Что-то вроде этого:
Неплохой пример, я тоже так почти всегда делаю, но хотел подметить несколько моментов...
* Если чекбоксов и т.п. много, то пока главное окно программы закроется пройдёт время, поэтому перед записью всегда лучше скрывать окно (GUISetState(@SW_HIDE, $hGUI) но не в коем случае не удалять, т.к чтение контролов приведёт к нулевому значению).
* В Ini-шку можно и не записывать “реальные” значения (для чекбокса к примеру, это 1 и 4), можно было бы сделать что-то в этом духе:
Func _SaveCfg()
GUISetState(@SW_HIDE, $hGUI)
$Input_Data = GUICtrlRead($hInput)
$Radio1_State = Number(GUICtrlRead($Radio1) = $GUI_CHECKED)
$Radio2_State = Number(GUICtrlRead($Radio2) = $GUI_CHECKED)
$CheckBox1_State = Number(GUICtrlRead($CheckBox1) = $GUI_CHECKED)
$CheckBox2_State = Number(GUICtrlRead($CheckBox2) = $GUI_CHECKED)
IniWrite($CfgFile, "Settings", "Input", $Input_Data)
IniWrite($CfgFile, "Settings", "Radio1", $Radio1_State)
IniWrite($CfgFile, "Settings", "Radio2", $Radio2_State)
IniWrite($CfgFile, "Settings", "CheckBox1", $CheckBox1_State)
IniWrite($CfgFile, "Settings", "CheckBox2", $CheckBox2_State)
EndFunc
DENoszone
12-03-2008, 22:14
как с симулировать нажатие колесика?
как нажимать на конопку на сайте *в опере) адрес ссылки http://www.*.com/index.php?ext=search&act=members&task=go&gid=1498&start=* (меняется) и текст имеет ">"
Creat0R, Если чекбоксов и т.п. много »
Хаачу гуй для winnt.sif. !!! Сам понимаю что поздновато, но к сожалению нужон!
Соотв. чекбоксов стоко же скоко параметров!
В Ini-шку можно и не записывать “реальные” значения (для чекбокса к примеру, это 1 и 4), »
Даже более того там же значения 1 или 0, Yes или No. Значит млин еще дополнит. обработка будет?! Или имеются какие нить механизмы?!
Creat0R, GUISetState(@SW_HIDE, $hGUI) »
То есть что получается что $hGUI глобальная переменная? Аесли параметром передавать?!
Чуствую этот материал на вики страничку по автоиту просится?
NikLok, там же значения 1 или 0
Это после моей обработки ;)
имеются какие нить механизмы?!
Не уверен что понимаю что тут спрашивается? :) - все записи нужно делать вручную, это самый надёжный метод.
получается что $hGUI глобальная переменная?
Поскольку она обьявлена в начале скрипта (не в циклах или в функциях/условиях), то она считается глобальной, хотя надёжнее всё же обьявлять её (Global $hGUI = ...)
Аесли параметром передавать?!
Можно конечно.
Чуствую этот материал на вики страничку по автоиту просится?
Кто бы этим занялся, у меня если честно времени не хватает (желание есть немернное :yes: ).
DENoszone,
как с симулировать нажатие колесика?
MouseClick("Middle") ?
как нажимать на конопку на сайте *в опере
Внешними средствами в Opera проблематично. Кстати по этой теме (по Opera) написал библиотеку автоматизации (http://creator-lab.ucoz.ru/load/3-1-0-36).
все записи нужно делать вручную, это самый надёжный метод. »
Вот и получился у меня тупой, но надежный код аж на 1 500 строк только для секции Components !!!
Maza Faka
13-03-2008, 08:33
Вот и получился у меня тупой, но надежный код аж на 1 500 строк только для секции Components »
Неужели нужно вырезать столько компонентов? Для чего?
Maza Faka,
столько компонентов? Для чего? »
А ля winnt.sif users manager.
Вот вырезка для 2-х компонент:
#include <GuiConstants.au3>
Global $CfgFile = "winnt.sif"
Global $AccessOpt_state = "On"
Global $Appsrv_console_state = "Off"
$hGUI = GuiCreate("WIndows XP winnt.Sif managers - feesh 0.0.1", 1020, 620)
GuiCtrlCreateTabItem("Components")
;CreateGUI
$AccessOpt = GUICtrlCreateCheckbox("AccessOpt",35,50,210,15)
GUICtrlSetState($AccessOpt,$GUI_UNCHECKED)
$Appsrv_console = GUICtrlCreateCheckbox("Appsrv_console",35,70,210,15)
GUICtrlSetState($Appsrv_console,$GUI_UNCHECKED)
; GUI MESSAGE LOOP
GuiSetState()
While GuiGetMsg() <> $GUI_EVENT_CLOSE
WEnd
Func _LoadCfg()
$State = IniRead($CfgFile,"Settings","AccessOpt","Off")
If $State == "On" Then
$AccessOpt_State=$GUI_CHECKED
;GUICtrlSetState($AccessOpt,$GUI_CHECKED)
Else
$AccessOpt_State=$GUI_UNCHECKED
;GUICtrlSetState($AccessOpt,$GUI_UNCHECKED)
EndIf
$State = IniRead($CfgFile,"Settings","Appsrv_console","Off")
If $State == "On" Then
$Appsrv_console_State=$GUI_CHECKED
;GUICtrlSetState($Appsrv_console,$GUI_CHECKED)
Else
$Appsrv_console_State=$GUI_UNCHECKED
;GUICtrlSetState($Appsrv_console,$GUI_UNCHECKED)
EndIf
EndFunc
Func _SaveCfg()
GUISetState(@SW_HIDE, $hGUI)
If GUICtrlRead($AccessOpt) = $GUI_CHECKED Then
$AccessOpt_State="On"
Else
$AccessOpt_State="Off"
EndIf
IniWrite($CfgFile,"Settings","AccessOpt",$AccessOpt_State)
If GUICtrlRead($Appsrv_console) = $GUI_CHECKED Then
$Appsrv_console_State="On"
Else
$Appsrv_console_State="Off"
EndIf
IniWrite($CfgFile,"Settings","Appsrv_console",$Appsrv_console_State)
EndFunc
Exit
При грубой прикидке получаем 20-25 строк на параметр.
Очень мне не нравится забор из конструкций - GUICtrlCreateCheckbox("AccessOpt",35,50,210,15)
Особенно задание абсолютных координат. Ну ладно, допустим заменю на переменные с инкрементом по вертикали и горизонтали, но возникают проблемы если захочется делать окно масштабируемым?! Сейчас что бы вывести все компоненты без скролинга требуется окно шириной в 1000!
А если монитор не поддерживает такого разрешения! Кто как решает проблему масштабируемости?
Еще почему-то при проведении мышкой над чекбоксом его подпись меняет фон на темно серый! Как отключить?
Как задать высоту табов создаваемых при помощи GuiCtrlCreateTabItem ?!?!
Кто нить достал книгу по autoit - AutoIt v3: Your Quick Guide (Andy Flesner, O'Reilly)
Очень хочется электронный вариант!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.