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

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

43

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

46

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

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
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

49

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).

50

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

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

По вопросам возмездной помощи пишите в личку
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.25.01 (Unicode 32-bit).