1 (изменено: mafckz, 2016-05-05 09:45:08)

Тема: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Не нашел в интернете информации о манипуляции браузером Microsoft Edge используя COM (Component Object Model), подобно тому, как это возможно с Internet Explorer.
Полагаю, что и с Edge'ом можно. Так ли это?

2

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Через Com насколько я знаю нет.
Можно через Selenium WebDriver.
Но я не пробовал, так как устанавливать все это не хочу - нет нужды.
https://habrahabr.ru/company/yandex/blog/173769/
https://autohotkey.com/boards/viewtopic … mp;t=11884

3 (изменено: mafckz, 2016-05-05 10:38:26)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Нашел следующий способ взаимодействия AHK со страницами в браузерах посредством JavaScript - использование функции для добавления шорткатов в javascript.

Для этого нужно:
- Установить в браузере расширение/плагин для использование пользовательских javascript'ов (для Google Chrome это Control Freak, CustomJS;  для FireFox - GreaseMonkey; либо другие).
- Написать JS скрипт, который будет выполняться на нужной странице.
- Включить написанный скрипт в шорткат функции.
- Сохранить полученный код в расширении браузера (можно настроить, что бы скрипт прогружался для одной страницы, для всего сайта, или всех страниц в браузере).

После этого через скрипт AHK можно посылать сочетания клавиш, созданных в функции шорткатов, и будет происходить выполнение javascript кода. Для обратной связи с AHK можно использовать команды alert и prompt.

Вот пример двух шорткатов. Первый "забинден" на F9 (через prompt показывает адрес веб-страницы), второй на Сontrol+F9 (также через prompt выдает список названий всех ссылок на странице):
(Шорткаты прописаны в самом конце кода)

/**
 * http://www.openjs.com/scripts/events/keyboard_shortcuts/
 * Version : 2.01.A
 * By Binny V A
 * License : BSD
 */
shortcut = {
	'all_shortcuts':{},//All the shortcuts are stored in this array
	'add': function(shortcut_combination,callback,opt) {
		//Provide a set of default options
		var default_options = {
			'type':'keydown',
			'propagate':false,
			'disable_in_input':false,
			'target':document,
			'keycode':false
		}
		if(!opt) opt = default_options;
		else {
			for(var dfo in default_options) {
				if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
			}
		}

		var ele = opt.target
		if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
		var ths = this;
		shortcut_combination = shortcut_combination.toLowerCase();

		//The function to be called at keypress
		var func = function(e) {
			e = e || window.event;
			
			if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields
				var element;
				if(e.target) element=e.target;
				else if(e.srcElement) element=e.srcElement;
				if(element.nodeType==3) element=element.parentNode;

				if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
			}
	
			//Find Which key is pressed
			if (e.keyCode) code = e.keyCode;
			else if (e.which) code = e.which;
			var character = String.fromCharCode(code).toLowerCase();
			
			if(code == 188) character=","; //If the user presses , when the type is onkeydown
			if(code == 190) character="."; //If the user presses , when the type is onkeydown
	
			var keys = shortcut_combination.split("+");
			//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
			var kp = 0;
			
			//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
			var shift_nums = {
				"`":"~",
				"1":"!",
				"2":"@",
				"3":"#",
				"4":"$",
				"5":"%",
				"6":"^",
				"7":"&",
				"8":"*",
				"9":"(",
				"0":")",
				"-":"_",
				"=":"+",
				";":":",
				"'":"\"",
				",":"<",
				".":">",
				"/":"?",
				"\\":"|"
			};
			//Special Keys - and their codes
			var special_keys = {
				'esc':27,
				'escape':27,
				'tab':9,
				'space':32,
				'return':13,
				'enter':13,
				'backspace':8,
	
				'scrolllock':145,
				'scroll_lock':145,
				'scroll':145,
				'capslock':20,
				'caps_lock':20,
				'caps':20,
				'numlock':144,
				'num_lock':144,
				'num':144,
				
				'pause':19,
				'break':19,
				
				'insert':45,
				'home':36,
				'delete':46,
				'end':35,
				
				'pageup':33,
				'page_up':33,
				'pu':33,
	
				'pagedown':34,
				'page_down':34,
				'pd':34,
	
				'left':37,
				'up':38,
				'right':39,
				'down':40,
	
				'f1':112,
				'f2':113,
				'f3':114,
				'f4':115,
				'f5':116,
				'f6':117,
				'f7':118,
				'f8':119,
				'f9':120,
				'f10':121,
				'f11':122,
				'f12':123
			};
	
			var modifiers = { 
				shift: { wanted:false, pressed:false},
				ctrl : { wanted:false, pressed:false},
				alt  : { wanted:false, pressed:false},
				meta : { wanted:false, pressed:false}	//Meta is Mac specific
			};
                        
			if(e.ctrlKey)	modifiers.ctrl.pressed = true;
			if(e.shiftKey)	modifiers.shift.pressed = true;
			if(e.altKey)	modifiers.alt.pressed = true;
			if(e.metaKey)   modifiers.meta.pressed = true;
                        
			for(var i=0; k=keys[i],i<keys.length; i++) {
				//Modifiers
				if(k == 'ctrl' || k == 'control') {
					kp++;
					modifiers.ctrl.wanted = true;

				} else if(k == 'shift') {
					kp++;
					modifiers.shift.wanted = true;

				} else if(k == 'alt') {
					kp++;
					modifiers.alt.wanted = true;
				} else if(k == 'meta') {
					kp++;
					modifiers.meta.wanted = true;
				} else if(k.length > 1) { //If it is a special key
					if(special_keys[k] == code) kp++;
					
				} else if(opt['keycode']) {
					if(opt['keycode'] == code) kp++;

				} else { //The special keys did not match
					if(character == k) kp++;
					else {
						if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
							character = shift_nums[character]; 
							if(character == k) kp++;
						}
					}
				}
			}

			if(kp == keys.length && 
						modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
						modifiers.shift.pressed == modifiers.shift.wanted &&
						modifiers.alt.pressed == modifiers.alt.wanted &&
						modifiers.meta.pressed == modifiers.meta.wanted) {
				callback(e);
	
				if(!opt['propagate']) { //Stop the event
					//e.cancelBubble is supported by IE - this will kill the bubbling process.
					e.cancelBubble = true;
					e.returnValue = false;
	
					//e.stopPropagation works in Firefox.
					if (e.stopPropagation) {
						e.stopPropagation();
						e.preventDefault();
					}
					return false;
				}
			}
		}
		this.all_shortcuts[shortcut_combination] = {
			'callback':func, 
			'target':ele, 
			'event': opt['type']
		};
		//Attach the function with the event
		if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
		else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
		else ele['on'+opt['type']] = func;
	},

	//Remove the shortcut - just specify the shortcut and I will remove the binding
	'remove':function(shortcut_combination) {
		shortcut_combination = shortcut_combination.toLowerCase();
		var binding = this.all_shortcuts[shortcut_combination];
		delete(this.all_shortcuts[shortcut_combination]);
		if(!binding) return;
		var type = binding['event'];
		var ele = binding['target'];
		var callback = binding['callback'];

		if(ele.detachEvent) ele.detachEvent('on'+type, callback);
		else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
		else ele['on'+type] = false;
	}
};


shortcut.add("F9",
function() {
	prompt("Адрес этой веб-страницы:", window.location.href);
},
{ 'type':'keydown', 'propagate':true, 'target':document}
);


shortcut.add("Ctrl+F9",
function() {
	var links = document.getElementsByTagName("A");
	LinkTitles ="";
	for (var i = 0; i < links.length; i++) {
		LinkTitles += links[i].innerText + "\n";
	}
	prompt("Список всех ссылкок на этой странице:", LinkTitles);
},
{ 'type':'keydown', 'propagate':true, 'target':document}
);

Пытался сделать сохранение результатов в буфер обмена - как я прочитал, для этого нужно создавать на странице элемент и кликать по нему (через код). Мои тесты показали, что не на всех страницах срабатывает такой метод. Остановился на выводе результата через prompt и его копировании.

4

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

В общем надо установить SeleniumBasic:
http://florentbr.github.io/SeleniumBasic/
После этого можно тренироваться:

#SingleInstance, Force
#Persistent
 
driver := ComObjCreate("Selenium.FirefoxDriver")
driver.Get("http://www.google.ca/")
driver.findElementById("lst-ib").sendKeys("Eiffel tower")
driver.FindElementByName("btnG").Click

5

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Привет.
Попробовал этот код.
Показывает ошибку.

Что он хочет от меня ?

Post's attachments

2016-10-21_14h39_02.png 71.61 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

6

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Там же написано: не может открыть прослушиваемый порт.
Можно попробовать на более старых версиях фаерфокса.

7

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

хм.. а на хроме можно ?
Какой код для хрома, мне бы в идеале именно хром.

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

8

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Там же есть справка.

driver := ComObjCreate("Selenium.ChromeDriver")

А можно запускать такой код, в уже открытом браузере ?

Нет.

9

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Ок. Получилось запустить.
Как я заметил код описанный тут, отличается от кода в другой система.
Наприме:  WebElement element = driver.findElement(By.name("q"));
А тут например: driver.findElementById("phone").sendKeys("1111111111")

Собственно вопрос. А есть где то список команда которые можно тут применять ?

10

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

"C:\Program Files\SeleniumBasic\Selenium.chm"

11

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибки )) будем грызть )

12

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

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

Было бы хорошо, если инструкция была с объяснениями или хотя бы с минимальными примерами. Иначе очень сложно понять.
Например. Знаю что есть метод .FullScreen(). Но вот где его писать, и как применять вообще не написано. Просто в хелпе тупо .FullScreen() и все. И не понятно где писать, к чему применять.

13 (изменено: Malcev, 2016-10-24 13:47:12)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Там же написано:

Dim instance As Window
instance.FullScreen()

И есть пример:

Set win1 = driver.Window
driver.SwitchToNextWindow().Close
win1.Activate();
txt = dlg.Text
dlg.Accept

14 (изменено: Autosql, 2016-10-25 12:13:28)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Аааа понял. Пример просто был гораздо ниже. Я просто не увидел.

Но по примеру так и не понял.
Пробовал как понял, но не работает.


driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
driver.FullScreen()

;send {F11}

Как я понял вот так FullScreen, но он что-то не работает. Или я не так понял.

15

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Вот так правильно, но у меня не работает:

driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
win1:= driver.Window
win1.FullScreen()

16

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Ну так и у меня не работает. То что правильно, видимо не правильно
Вот только как правильно, из хелпа не понятно

17

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Почему неправильно? Другие же методы работают:

driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
win1:= driver.Window
win1.Maximize()

Если хотите докопаться до истины - пишите автору на gihub в issues.

18

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Другие да ) но этот не отработал.
Но я решил костылем )


driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
send {F11}
sleep 50

Из 10 раз отработал всегда верно.

19

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Подскажите еще.
Когда запускаю такой код:


driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
send {F11}
sleep 50

Хром показывает такую надпись.

И из-за неё фейлятся все тесты. Как отключить её я не нашел.
Отключал в хроме все приложения. Не помогло.
Кто знает как отключить это ?

Post's attachments

2016-10-25_14h58_48.png
2016-10-25_14h58_48.png 27.65 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

20

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

У меня на последней версии хрома и последнем chromedriver.exe такого не наблюдается.

21 (изменено: Autosql, 2016-10-26 11:58:12)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Версия 54.0.2840.71 m (64-bit)
Хмм. обновил браузер хром.
Стала версия и скрипт вообще перестал запускаться. Что он хочет, работал же этот код на старой версии.


Error:  0xA00A0021 - 
Source:		Selenium
Description:	SessionNotCreatedError
session not created exception
from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData":{"frameId":"13368.1","isDefault":true},"id":1,"name":"","origin":"://"}
  (Session info: chrome=54.0.2840.71)
  (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 10.0 x86_64)
HelpFile:		(null)
HelpContext:	0

Specifically: Get

	Line#
	003: SendMode,Input
	004: SetWorkingDir,%A_ScriptDir%
	007: Return
	008: {
	012: Random,rnd,100,999
	014: driver := ComObjCreate("Selenium.ChromeDriver")
--->	015: driver.Get("https://yandex.ru")  
	016: driver.findElementById("pe").sendKeys("11")  
	017: Send,{F11}
	018: driver.findElementByName("pa").sendKeys("1")  
	019: Sleep,1500
	020: driver.FindElementByClass("de").Click  
	022: driver.findElementByXPath("//a[@data-id='94F139D79']").click  
	023: driver.findElementByXPath("//div[@data-id='98E37A']//input[@value='tr]").click  

22

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Скачайте последний chromedriver и замените свой.
http://chromedriver.storage.googleapis. … _win32.zip

23 (изменено: Autosql, 2016-10-26 11:58:20)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибо. Заработало. И ошибка ушла что выше.

24

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Autosql, расставьте заглавные буквы и знаки препинания в своих сообщениях. Смайлик точкой не считается.

25 (изменено: Malcev, 2016-10-27 18:01:20)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Правильней посылать F11 через Selenium, но chrome f1-f12 не воспринимает в отличие от IE.
Наверное баг.

driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("https://yandex.ru")
driver.sendKeys(driver.Keys.F11)
msgbox
driver := ComObjCreate("Selenium.IEDriver")
driver.Get("https://yandex.ru")
driver.sendKeys(driver.Keys.F11)
msgbox

Да и хендл окна непонятно как получить.
Этот код на VBS:

Set driver = CreateObject("Selenium.ChromeDriver")
driver.Get "https://www.google.co.uk"
msgbox driver.Window.Handle

пишет:

Object does not support this property or method

Хотя в справке написано:

Window.Handle Property 

Returns the handle of the current window.

Namespace: Selenium
Assembly: Selenium (in Selenium.dll) Version: 2.0.9.0 (2.0.9.0)
Syntax
VB Usage
CopyDim instance As Window
Dim value As String

value = instance.Handle

Хотя, такой же код название окна получает:

Set driver = CreateObject("Selenium.ChromeDriver")
driver.Get "https://www.google.co.uk"
msgbox driver.Window.Title

В общем непонятно.

26 (изменено: serzh82saratov, 2017-01-05 22:54:27)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Malcev Selenium.ChromeDriver не пользовался более?
Не знаешь как насчёт стабильности, насколько полный функционал в сравнении с IE.
Есть определение координат DOM элементов по отношению к окну.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27 (изменено: Malcev, 2017-01-05 23:15:48)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Не, больше не пользуюсь.
Когда пользовался - работал стабильно.
Функционал достаточный для моих нужд был (парсинг сайта с кучей джаваскриптов, где IE зависал).
Нельзя было работать в минимизированном режиме - окно должно быть видимым, либо работать через PhantomJS.
Определение координат DOM элементов по отношению к окну должен WebElement.Location Method возвращать.

28

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибо, а не в курсе, оно может работать с портативной версией Chrome или другими?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

29

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Не знаю. Но можно попробовать так:
http://stackoverflow.com/questions/3281 … stallation

30

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Да тоже видел, но непойму как запустить?


chromePath := "  \GoogleChromePortable.exe"  
chromedriverpath := "  \chromedriver.exe" 
options := new ChromeOptions()
options.setBinary(chromepath) 
System.setProperty("webdriver.chrome.driver", chromedriverpath) 
driver := new ChromeDriver(options)
 
 ; driver := ComObjCreate("Selenium.ChromeDriver")
driver.Get("http://www.google.ca/")
driver.findElementById("lst-ib").sendKeys("Eiffel tower")
driver.FindElementByName("btnG").Click
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

31

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Так попробуй:

driver := ComObjCreate("Selenium.ChromeDriver")
path := "C:\Program Files (x86)\Google\Chrome\Application\chrome1.exe"
driver.SetBinary(path)
driver.Get("http://www.google.ca/")
driver.findElementById("lst-ib").sendKeys("Eiffel tower")
driver.FindElementByName("btnG").Click
msgbox

32

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибо!
Но сразу заметил что не цепляет расширения, вот из папки ком строка:

"C:\Users\sergey\Desktop\Dummy\Chrome_2\App\Chrome-bin\chrome.exe" --user-data-dir="C:\Users\sergey\Desktop\Dummy\Chrome_2\Data\profile" --disk-cache-dir="C:\Users\sergey\AppData\Local\Temp\GoogleChromePortable"

Вот Selenium запускает:

"C:\Users\sergey\Desktop\Dummy\Chrome_2\App\Chrome-bin\chrome.exe" --user-data-dir="C:\Users\sergey\Desktop\Dummy\Chrome_2\Data\profile" --disk-cache-dir="C:\Users\sergey\AppData\Local\Temp\Selenium\GoogleChromePortable" --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-infobars --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-logging --ignore-certificate-errors --load-component-extension="C:\Users\sergey\AppData\Local\Temp\Selenium\scoped_dir1164_14712\internal" --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12650 --safebrowsing-disable-auto-update --test-type=webdriver --use-mock-keychain --user-data-dir="C:\Users\sergey\AppData\Local\Temp\Selenium\scoped_dir1164_14219" data:,

Папка с профилем правильная, дальше Temp уже не та...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

33

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Хотя почему то ключ повторяется:

--user-data-dir="C:\Users\sergey\Desktop\Dummy\Chrome_2\Data\profile" 
--user-data-dir="C:\Users\sergey\AppData\Local\Temp\Selenium\scoped_dir1164_14219"

Получается не цепляет профиль из папки ехе.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

У меня вот так запускается максимизированным:

driver := ComObjCreate("Selenium.ChromeDriver")
path := "C:\Program Files (x86)\Google\Chrome\Application\chrome1.exe"
driver.SetBinary(path)
driver.AddArgument("--start-maximized")
driver.Get("http://www.google.ca/")
driver.findElementById("lst-ib").sendKeys("Eiffel tower")
driver.FindElementByName("btnG").Click
msgbox

Думаю, также можно повесить свой профайл.

35 (изменено: serzh82saratov, 2017-01-06 01:07:22)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

driver := ComObjCreate("Selenium.ChromeDriver")
path := "C:\Users\sergey\Desktop\222\Chrome_2\GoogleChromePortable.exe"
profilepath := "C:\Users\sergey\Desktop\222\Chrome_2\Data\profile"
driver.SetBinary(path)
driver.AddArgument("user-data-dir=" profilepath) 
driver.Get("http://www.google.ca/")
driver.findElementById("lst-ib").sendKeys("Eiffel tower")
driver.FindElementByName("btnG").Click 
Return

Как то видимо, а дальше все параметры перечислять, отключать...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

36 (изменено: serzh82saratov, 2017-01-06 01:08:33)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Закладки из профиля начали отображатся, расширений нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

37

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

А так пробовал?

driver.AddArgument("load-extension=/path/to/extension")

38

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Пробую, не пойму видимо какую папку указать,

driver.AddArgument("load-extension=C:\Users\sergey\Desktop\222\Chrome_2\App\Chrome-bin\55.0.2883.87\Extensions")

---------------------------
Ошибка при загрузке расширения
---------------------------
Не удалось загрузить расширение из: C:\Users\sergey\Desktop\222\Chrome_2\App\Chrome-bin\55.0.2883.87\Extensions. Файл манифеста отсутствует или недоступен для чтения.
---------------------------
ОК   
---------------------------

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

39

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Наверное надо не папку, а путь к файлу расширения.

40 (изменено: serzh82saratov, 2017-01-06 01:58:54)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Один раз подхватило все  с Chrome_2\App\Chrome-bin\55.0.2883.87\default_apps, и опять всё по новой...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

41

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Странно. У меня так подхватывает:

driver.AddArgument("load-extension=D:\1\aapocclcgogkmnckokdopfmhonfmgoek\0.9_0")

"D:\1\aapocclcgogkmnckokdopfmhonfmgoek\0.9_0" - путь до manifest.json данного расширения.

42

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибо, тоже вроде работает. Какая то кутерьма возникает, может после использования ехе из проводника. Папки куда то мигрируют, то что было установлено из драйвера вроде load-extension не требует...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

43

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Если добавить несколько, добавляется только последнее.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

44

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Их надо через запятую без пробела перечислять:

driver.AddArgument("load-extension=D:\1\aapocclcgogkmnckokdopfmhonfmgoek\0.9_0,D:\1\felcaaldnbdncclmgdcncolpebgiejap\1.1_0")

45

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Точно, а я через ";" пробовал. У тебя не вылазит назойливое отключить расширение в режиме разработчика?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

46

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Во вкладке расширений отметка режима разработчика снята. Кстати если её установить то увсех вылезают ошибки установки, хотя вроде рабочие.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

47

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Чтоб отключить этот попап нужно пропатчить батником chrome.dll

<# :
@echo off
copy/b "%~f0" "%temp%\%~n0.ps1" >nul
powershell -Version 2 -ExecutionPolicy bypass -noprofile "%temp%\%~n0.ps1" "%cd% " "%~1"
del "%temp%\%~n0.ps1"
pause
exit /b
#>
param([string]$cwd='.', [string]$dll)

function main {
    "Chrome 'developer mode extensions' warning disabler v1.0.9.20161227`n"
    $pathsDone = @{}
    if ($dll -and (gi -literal $dll)) {
        doPatch "DRAG'n'DROPPED" ((gi -literal $dll).directoryName + '\')
        exit
    }
    doPatch CURRENT ((gi -literal $cwd).fullName + '\')
    ('HKLM', 'HKCU') | %{ $hive = $_
        ('', '\Wow6432Node') | %{
            $key = "${hive}:\SOFTWARE$_\Google\Update\Clients"
            gci -ea silentlycontinue $key -r | gp | ?{ $_.CommandLine } | %{
                $path = $_.CommandLine -replace '"(.+?\\\d+\.\d+\.\d+\.\d+\\).+', '$1'
                doPatch REGISTRY $path
            }
        }
    }
}

function doPatch([string]$pathLabel, [string]$path) {
    if ($pathsDone[$path.toLower()]) { return }

    $dll = $path + "chrome.dll"
    if (!(test-path -literal $dll)) {
        return
    }
    "======================="
    "$pathLabel PATH $((gi -literal $dll).DirectoryName)"

    "`tREADING Chrome.dll..."
    $bytes = [IO.File]::ReadAllBytes($dll)

    # process PE headers
    $BC = [BitConverter]
    $coff = $BC::ToUInt32($bytes,0x3C) + 4
    $is64 = $BC::ToUInt16($bytes,$coff) -eq 0x8664
    $opthdr = $coff+20
    $codesize = $BC::ToUInt32($bytes,$opthdr+4)
    $imagebase32 = $BC::ToUInt32($bytes,$opthdr+28)

    # patch the flag in data section
    $data = $BC::ToString($bytes,$codesize)
    $flag = "ExtensionDeveloperModeWarning"
    $stroffs = $data.IndexOf($BC::ToString($flag[1..99]))/3 - 1
    if ($stroffs -lt 0) {
        write-host -f red "`t$flag not found"
        return
    }
    $stroffs += $codesize
    if ($bytes[$stroffs] -eq 0) {
        write-host -f darkgreen "`tALREADY PATCHED"
        return
    }

    $exe = join-path (split-path $path) chrome.exe
    $EA = $ErrorActionPreference
    $ErrorActionPreference = 'silentlyContinue'
    while ((get-process chrome -module | ?{ $_.FileName -eq $exe })) {
        forEach ($timeout in 15..0) {
            write-host -n -b yellow -f black `
                "`rChrome is running and will be terminated in $timeout sec. "
            write-host -n -b yellow -f darkyellow "Press ENTER to do it now. "
            if ([console]::KeyAvailable) {
                $key = $Host.UI.RawUI.ReadKey("AllowCtrlC,IncludeKeyDown,NoEcho")
                if ($key.virtualKeyCode -eq 13) { break }
                if ($key.virtualKeyCode -eq 27) { write-host; exit }
            }
            sleep 1
        }
        write-host
        get-process chrome | ?{
            $_.MainWindowHandle.toInt64() -and ($_ | gps -file).FileName -eq $exe
        } | %{
            "`tTrying to exit gracefully..."
            if ($_.CloseMainWindow()) {
                sleep 1
            }
        }
        $killLabelShown = 0
        get-process chrome | ?{
            ($_ | gps -file | select -expand FileName) -eq $exe
        } | %{
            if (!$killLabelShown++) {
                "`tTerminating background chrome processes..."
            }
            stop-process $_ -force
        }
        sleep -milliseconds 200
    }
    $ErrorActionPreference = $EA

    $bytes[$stroffs] = 0
    "`tPATCHED $flag flag"

    # patch the channel restriction code for stable/beta
    $code = $BC::ToString($bytes,0,$codesize)
    $codepattern = "83-F8-03-7D-.{1,100}" # cmp eax,3; jge ...
    $chanpos = 0
    try {
        if ($is64) {
            $pos = 0
            $rx = [regex] "$codepattern-48-8D"
            do {
                $m = $rx.match($code,$pos)
                if (!$m.success) { break }
                $chanpos = $m.index/3 + 2
                $pos = $m.index + $m.length + 1
                $offs = $BC::ToUInt32($bytes,$pos/3+1)
                $diff = $pos/3+5+$offs - $stroffs
            } until ($diff -ge 0 -and $diff -le 4096 -and $diff % 256 -eq 0)
            if (!$m.success) {
                $rx = [regex]'84-C0.{18,48}83-F8-(03)-7D-.{30,60}84-C0'
                $m = $rx.matches($code)
                if ($m.count -ne 1) { throw }
                $chanpos = $m[0].groups[1].index/3
            }
        } else {
            $flagOffs = [uint32]$stroffs + [uint32]$imagebase32
            $flagOffsStr = $BC::ToString($BC::GetBytes($flagOffs))
            $variants = "(?<channel>$codepattern)-68-(?<flag>`$1-.{6}`$2)",
                    '68-(?<flag>$1-.{6}$2).{300,500}E8.{12,32}(?<channel>83-F8-03-7D)',
                    'E8.{12,32}(?<channel>83-F8-03-7D).{300,500}68-(?<flag>$1-.{6}$2)'
            forEach ($variant in $variants) {
                $pattern = $flagOffsStr -replace '^(..)-.{6}(..)', $variant
                "`tLooking for $($pattern -replace '\?<.+?>', '')..."
                $minDiff = 65536
                foreach ($m in [regex]::matches($code, $pattern)) {
                    $maybeFlagOffs = $BC::toUInt32($bytes, $m.groups['flag'].index/3)
                    $diff = [Math]::abs($maybeFlagOffs - $flagOffs)
                    if ($diff % 256 -eq 0 -and $diff -lt $minDiff) {
                        $minDiff = $diff
                        $chanpos = $m.groups['channel'].index/3 + 2
                    }
                }
            }
            if (!$chanpos) { throw }
        }
    } catch {
        write-host -f red "`tUnable to find the channel code, try updating me"
        write-host -f red "`thttp://stackoverflow.com/a/30361260"
        return
    }
    $bytes[$chanpos] = 9
    "`tPATCHED Chrome release channel restriction"

    "`tWriting to a temporary dll..."
    [IO.File]::WriteAllBytes("$dll.new",$bytes)

    "`tBacking up the original dll..."
    move -literal $dll "$dll.bak" -force

    "`tRenaming the temporary dll as the original dll..."
    move -literal "$dll.new" $dll -force

    $pathsDone[$path.toLower()] = $true
    write-host -f green "`tDONE.`n"
    [GC]::Collect()
}

main

http://stackoverflow.com/questions/3028 … nsions-pop

Во вкладке расширений отметка режима разработчика снята. Кстати если её установить то увсех вылезают ошибки установки, хотя вроде рабочие.

Да, у меня тоже ругается.
Если работает, то, думаю, можно забить.

48

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Спасибо, но с ним при старте виснет например

driver.Get("chrome://extensions/")

не открывает, и через таймаут ошибка.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

49

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Может я усложняю всё, и запускать разных пользователей проще подменой папки profile, портативная тоже не обязательна.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

50

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Видимо запуск с load-extension не лучшая идея, то есть надо установить расширения из файлов один раз при первом запуске пользователя, а потом они сами работают.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

51

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Вряд ли такое получится. Через Selenium вроде при каждом запуске надо указывать какие расширения запускать.

Спасибо, но с ним при старте виснет например
driver.Get("chrome://extensions/")

А хром последней версии?

52

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Пишет 55.0.2883.87 последняя 32-bit portable.

Malcev пишет:

Через Selenium вроде при каждом запуске надо указывать какие расширения запускать.

Да нет всё ок, user-data-dir указываешь и всё как было, только если расширения ручками установлены были.
Теперь думаю как при первом запуске пользователя, из файлов, несколько расширений установить, чтоб как ручками было.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

53 (изменено: Malcev, 2017-01-06 22:03:47)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

С этой версией попап не выскакивает и всё работает:
http://rutracker.org/forum/viewtopic.php?t=5328293

Доп. информация:
Браузер пропатчен для отключения назойливого сообщения при использовании дополнений в режиме разработчика. Как оказалось по новой политике гугла расширения привязываются к компьютеру, поэтому в комплекте никаких расширений нет.

54

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Та же версия и патч. У меня не пойми что с этим load-extension. Вообщем как писал выше решил что лучше буду в папки профилей ставить.

Malcev пишет:

отключения назойливого сообщения

Вот как бы отключить что там справа периодически выскакивает. Может сообщение есть. У тебя кстати нет примера установки какого нибудь события?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

55

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Не, не было надобности.
Я скачал с рутрекера эту версию хрома.
И у меня при ее запуске с моими расширениями - ничего справа не выскакивает.
А у тебя продолжает выскакивать?

56 (изменено: serzh82saratov, 2017-01-06 22:56:08)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Наверное друг друга не поняли, с этим сообщением проблем и не было, о расширения оно не появлялось после патча.

Кстати если её установить то у всех вылезают ошибки установки, хотя вроде рабочие.

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

57

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

А если с таким аргументом запускать, появляются?

driver.AddArgument("--disable-notifications")

Тут их полный список:
http://peter.sh/experiments/chromium-co … -switches/

58

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Да всё равно появляются, список удобный, спасибо.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

59 (изменено: serzh82saratov, 2017-01-08 17:57:27)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Malcev
А ты ошибки не обрабатывал? Например driver.Get(URL) в любом раскладе возвращает -1, загрузилось или нет.
Через Try Catch не айс.

WebDriver.Get Method

Return Value
Type: Boolean
Return true if the url was openned within the timeout, false otherwise

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

60

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Не обрабатывал.
Но на VBS работает:

Set driver = CreateObject("Selenium.ChromeDriver")
msgbox driver.Get("https://www.google.co.uk")

61

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Загадка.
А коллекции элементов не пользовал?


	arr := driver.FindElements(By.Any(By.Name("name"), By.Id("id")))
	for k, v in arr
	{
		MsgBox % A_Index
	}

Вообще трудно как то оно с примеров справки и других языков портируется.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

62

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

driver:= ComObjCreate("Selenium.ChromeDriver")
url:="https://www.google.co.kr/search?q=ahk&source=lnms&tbm=isch&sa=X"
driver.Get(url)
For k in driver.findElementsByCss("input[name=""q""]")
{
   if k.IsDisplayed
      k.SendKeys(" rocks!")
   msgbox % A_Index
}
msgbox Done
driver.quit()

63

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Опечатка что ли была, это первое что я пробовал.
http://www.my-article.net/data/files/tiny-mce/68/img/ntv/57422725copy3.jpg.gif

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

64

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

ВидеоТуториал на офсайте выложили:
https://autohotkey.com/boards/viewtopic … mp;t=32323

65 (изменено: aist51, 2017-09-16 14:40:20)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Здравствуйте! Подскажите, пожалуйста,
как с помощью ahk - скрипта закрывать окно браузера Яндекс?
Или файлом *.bat, приведите пример, пожалуйста.

Спасибо! Вопрос решен, применил taskkill...
Можете удалить это моё сообщение.

66

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Autosql пишет:

А можно запускать такой код, в уже открытом браузере ?

Malcev пишет:

Нет.

Оказывается, Хром можно так:
1) Закрываем запущенные окна с хромом.
2) Запускаем хром с командной строки: chrome.exe --remote-debugging-port=9222
3) Запускаем следующий код:

driver := ChromeGet()

F12::
MsgBox, % driver.Window.Title "`n" driver.Url
return

ChromeGet(IP_Port := "127.0.0.1:9222") {
	driver := ComObjCreate("Selenium.ChromeDriver")
	driver.SetCapability("debuggerAddress", IP_Port)
	driver.Start()
	return driver
}

67 (изменено: Som, 2021-09-06 12:59:00)

Re: AHK: Управление (взаимодействие) AutoHotkey с браузерами

Всем привет.
Помогите заполнить форму на https://seosprint.net/support-new/30
У меня не получается заполнить HTML поле "Ваш комментарий". Элемент не определяется, и я не могу его найти.

Пробую:

driver.findElementByXPath("//*[@id=""tinymce""]").SendKeys("123")

Не находит(