1 (изменено: Autosql, 2016-10-27 10:56:38)

Тема: AHK: Использование функции Add(x)

Добрый день.
Пробую сделать функцию, посмотрел Help, вроде много описано, но так и не понял всей сути.

Есть такой код.


Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

driver.findElementByXPath(Vibor.Create).click

Хочу под него сделать функцию, чтобы вызов был проще.
Например вызов такого вида:


Add(Create)
Add(***)

Как я понял, как раз именно так будет вызов идти.

Пробую сделать функцию примерно так:


Add(NAME)
{
	 return driver.findElementByXPath(Vibor.NAME).click
}

В итоге хочу получить строку такого вида:


Вызов.
Add(Create)

После выполнения как я понимаю должна получится такая строка:


driver.findElementByXPath(Vibor.Create).click

Где далее он, зайдет в список Vibor найдет переменную Create и уже сделает из неё строку.


driver.findElementByXPath("//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']").click

Но выполнив этот код, он ничего не возвращает.
Я видимо что-то не так делаю, или неверно понимаю функцию ?

Истоки из данной темы: http://forum.script-coding.com/viewtopic.php?pid=108571

2

Re: AHK: Использование функции Add(x)

Что-то я не понимаю как это работает.

Так же у меня появилась задача.


Snils()
{
	тут какие то действия по подсчету снилса.
 itog := %raschet%
return itog
}

В итоге хочу получить: 12341241234

Я верно делаю ?
Вызов Send % Snils()

3

Re: AHK: Использование функции Add(x)

Add("Create")

Add(NAME)
{
   Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}
   driver.findElementByXPath(Vibor[NAME]).click
}

Обратите внимание на кавычки и скобки.

Autosql пишет:

Что-то я не понимаю как это работает.

Вам нужно ознакомиться со статьёй «Переменные и выражения». Вот на русском, но лучше на английском, русский вариант устарел.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: Autosql, 2016-10-28 12:18:16)

Re: AHK: Использование функции Add(x)

teadrinker.
Привет. Ваш вариант не работает.
Примерно должно так выглядеть:


Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

Add(NAME)
{

   driver.findElementByXPath(Vibor[NAME]).click
}

Add("Create")

При этом после

driver.findElementByXPath(Vibor

нужна точка.
Вот такой код в итоге нужно получить на первом выходе. Но на точку выдает ошибку, пробовал в {.} скобки её внести, но так же выдает ошибку.


driver.findElementByXPath(Vibor.[NAME]).click

После этого код видит что есть Vibor.[NAME] он идет в словарь, находит элемент и подставляет, и в итоге получается финальная строчка.


driver.findElementByXPath("//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']")

Посмотрел инструкцию, видимо это она https://autohotkey.com/docs/Objects.htm … ase_Object
Если честно не очень понял, там какие то сложные примерны очень.
У меня цель понять 2 вещи:
1. Как сделать функцию где нет входящего параметра. Где просто при её вызове она выдает какой то результат.
2. Как сделать функцию где будет 1 или 2 входящих параметра, где в итоге этот входящий параметр подставится в определенное место, и на выходе я получу целую строку.

Вот подобных примеров я не нашел. Как я видел. там примеры только с входящими данными. Или я не верно смотрю ?

5

Re: AHK: Использование функции Add(x)

Autosql пишет:

нужна точка.

Перед квадратными скобками точка не нужна.

Autosql пишет:

Ваш вариант не работает.

Я не учёл, что внутри функции не виден внешний объект driver. Попробуйте так:

Add("Create")

Add(NAME)
{
   global driver
   Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}
   driver.findElementByXPath(Vibor[NAME]).click
}

Или так:

Add("Create", driver)

Add(NAME, obj)
{
   Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}
   obj.findElementByXPath(Vibor[NAME]).click
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Использование функции Add(x)

Autosql пишет:

Как сделать функцию где нет входящего параметра. Где просто при её вызове она выдает какой то результат.

MsgBox, % MyFunc()

MyFunc()  {
   Return A_AhkPath
}
Autosql пишет:

Как сделать функцию где будет 1 или 2 входящих параметра, где в итоге этот входящий параметр подставится в определенное место, и на выходе я получу целую строку.

MsgBox, % MyFunc("Hello")

MyFunc(str)  {
   Return str . ", World!"
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Использование функции Add(x)

Что то не получается.
Вот такой же код ?


driver := ComObjCreate("Selenium.ChromeDriver")
Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

MsgBox, % Add("Create", driver)

Add(NAME, obj)
{
   Return obj.findElementByXPath(Vibor[NAME]).click
}

После запуска ничего не выводит.

8

Re: AHK: Использование функции Add(x)

Да где ж он такой же? Сравните свою функцию, и мою.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: Autosql, 2016-10-28 15:50:04)

Re: AHK: Использование функции Add(x)

Ну я сделал как должно быть.


Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

Должен быть во вне.
Так же у вас не было Return.
Как я понял без него он ничего не выводит и не делает.
У меня же цель, на выходе получить именно строку.


driver.findElementByXPath("Vibor.Название что я передал")

Если ваш запрос то вот он.


Add("Create")

Add(NAME)
{
   global driver
   Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}
   driver.findElementByXPath(Vibor[NAME]).click
}

Но Vibor :... должен быть во вне. Получается код такой.


   Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

Add(NAME)
{
   global driver
   driver.findElementByXPath(Vibor[NAME]).click
}

Add("Create")

при этом у вас нет точки вот тут. Vibor[NAME] = Vibor.[NAME], а она нужна, иначе он не сможет найти этот элемент в словаре.

10

Re: AHK: Использование функции Add(x)

Autosql пишет:

Но Vibor :... должен быть во вне.

Тогда так:

driver := ComObjCreate("Selenium.ChromeDriver")
Vibor := {Create: "//a[@data-id='94F13529BB3C3800D2A0AAED09EC277841279D79']"}

Add("Create")

Add(NAME)
{
   global driver, Vibor
   driver.findElementByXPath(Vibor[NAME]).click
}
Autosql пишет:

при этом у вас нет точки вот тут. Vibor[NAME] = Vibor.[NAME], а она нужна, иначе он не сможет найти этот элемент в словаре.

Это не так, см. ссылку, которую я приводил, такой синтаксис, другого нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Использование функции Add(x)

О спасибо. Заработало.

12

Re: AHK: Использование функции Add(x)

teadrinker пишет:

MsgBox, % MyFunc()

MyFunc()  {
   Return A_AhkPath
}

Привет. Возник еще вопрос.
Если у меня вот такая функция:

Генерация Снилс



SnilsNew()
{
;получаем случайные числа для снилса
Random, r1, 0,9
Random, r2, 0,9
Random, r3, 1,9
Random, r4, 0,9
Random, r5, 0,9
Random, r6, 1,9
Random, r7, 0,9
Random, r8, 0,9
Random, r9, 1,9

;присвоение и расчет
a1 := r9*1
a2 := r8*2
a3 := r7*3
a4 := r6*4
a5 := r5*5
a6 := r4*6
a7 := r3*7
a8 := r2*8
a9 := r1*9

;суммируем итог, для подсчета суммы.
summ := a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9

;если меньше 100. то истог суммы ставим в конец
if (summ < 100)
{
return %r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%%summ%
}

;если = 100 или = 101. то ставим в конец 00
if (summ == 100) or (summ == 101)
{
return %r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%00	
}

;если больше 100. но не ровна 100 и 101. то сумму делим на остаток 101 и остаток помещаем в итог
if (summ > 100) and (summ != 100) and (summ !=101)
{
a3 := mod(summ,101)
	if a3 <=9
	return %r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%0%a3%
	
	else 
	return %r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%%a3%
}
sleep 10
}

Как мне вывести сразу столько параметров ?

%r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%%a3%

Когда я пробую делать как в коде:

return %r1%%r2%%r3%%r4%%r5%%r6%%r7%%r8%%r9%%a3%

И запускаю так
SnilsNew()

То он ничего не выдает. Я видимо что-то опять туплю ?

13

Re: AHK: Использование функции Add(x)

Уберите знаки процентов и разделите переменные просто пробелами.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder