Yeah, I know that. Some web pages have draggable elements I thought you were asking for thatpAnDeLa wrote: ↑13 Jul 2022, 01:12Oh nice thx, those are great resources! And I should've read the Rufaydium docs more though lol,You can check web-driver actions or Rufaydium's Session.Actions() actually I am planning to write action class to make this stuff easy.
drag and drop simulation/substitution can also be done with:Code: Select all
;simulate drag and drop file via file input element filelocation := "C:\Users\username\Pictures\image.png" ;set file path UploadFile := Page.querySelectorAll(".chatEntry input[name=fileupload")[0] ;select file input element UploadFile.Sendkey(StrReplace(filelocation,"\","/")) ;if Element is input element then file location can be set using SendKey()
Rufaydium WebDriver 1.7.2 (no selenium/websocket)
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
If you want to do this in headless mode, you'll need the flags:pAnDeLa wrote: ↑06 Jul 2022, 20:49
Thanks for getting back, I did a lot of digging and was able to find a flag that actually logs js console messages!
That flag being --webview-log-js-console-messages. While the method you posted into getting the browser log is great and yields far more detailed information, I have a quick solution as well The chrome_debug.log file generated by chrome is deleted every time you reopen chrome too. If I recall you must use the Default or current Chrome Profile in Rufaydium as well.
Here's a working example of js callbacks in Rufaydium & Chrome, thanks again for this amazing libraryCode: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #Include Rufaydium.ahk #SingleInstance,Force if (A_Args.Length() = 0) { Run, "C:\Program Files\AutoHotkey\AutoHotkeyU64.exe" %A_ScriptFullPath% 1 ExitApp } Chrome_Log := new CLogTailer("C:\Users\uername\AppData\Local\Google\Chrome\User Data\chrome_debug.log", Func("ReadLog")) ReadLog(Console_Output){ ;ToolTip % "New line added @ " A_TickCount ": " text if RegExMatch(Console_Output,"hello world!") { msgbox, Houston we have lift off! gosub, DoStuff } } /* Load "chromedriver.exe" from "A_ScriptDir" In case Driver is not yet available, it will Download "chromedriver.exe" into "A_ScriptDir" before starting the Driver. */ ChromeInst := new Rufaydium("chromedriver.exe", "--port=9515") ChromeInst.capabilities.setUserProfile("Default") ;use Default chrome profile ChromeInst.capabilities.addArg(" --enable-logging ") ;enable chrome_debug.log file ChromeInst.capabilities.addArg(" --v=0 ") ;needed for above logging flag to work ChromeInst.capabilities.addArg(" --webview-log-js-console-messages ") ;this undocumented flag is the peace de la resistance we need for js/console to ahk callbacks to work /* Create new session if WebBrowser Version Matches the Webdriver Version. It will ask to download the compatible WebDriver if not present. */ Page := ChromeInst.NewSession() ;Page := ChromeInst.NewSession("C:\Program Files\Google\Chrome\Application\chrome.exe") ;Page.CDP.call("Console.enable") ;not needed in this case Page.Navigate("https://www.autohotkey.com/docs/AutoHotkey.htm") ; navigate to url sleep, 1000 gosub, InjectJS return DoStuff: Settings := Page.getElementsByClassName("settings")[0] ;open settings page Settings.Click() msgbox, We did stuff! return ;https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ;https://www.autohotkey.com/boards/viewtopic.php?style=17&p=306235#p306235 InjectJS: JS_MutationObserver = ( function init() { if (window.MutationObserver) { startMutationObserver(); } else { startMutationEvents(); } } function startMutationObserver() { // target node to be observed var target = document.querySelector('body'); // mutation observer config object with the listeners configuration var config = listenOnlyAttributeChanges(); // mutation observer instantiation var mutationObs = new MutationObserver(callbackAttributeChange); // observe initialization mutationObs.observe(target, config); } function listenOnlyAttributeChanges() { return { attributes: true, childList: true, subtree: true }; } function callbackAttributeChange(mutations, mutationObs) { for (var i = 0, length = mutations.length; i < length; i++) { var mutation = mutations[i]; if (mutation.type === 'attributes' && mutation.attributeName === 'style') { var target = mutation.target; console.log(target.id + target.style.display); console.log("---" + target.id + target.class); //test console.log("hello world!"); } } } var addedNodes = 0; var colorpage = false; init(); ) ;Inject Mutation Observer Page.CDP.Evaluate(JS_MutationObserver) return F12:: ChromeInst.QuitAllSessions() ; close all session ChromeInst.Driver.Exit() ; then exits driver Process,Close,chromedriver.exe ;force closer driver ExitApp ;https://www.autohotkey.com/boards/viewtopic.php?t=47894#p215692 class CLogTailer { __New(logfile, callback){ this.file := FileOpen(logfile, "r-d") this.callback := callback ; Move seek to end of file this.file.Seek(0, 2) fn := this.WatchLog.Bind(this) SetTimer, % fn, 100 } WatchLog(){ Loop { p := this.file.Tell() l := this.file.Length line := this.file.ReadLine(), "`r`n" len := StrLen(line) if (len){ RegExMatch(line, "[\r\n]+", matches) if (line == matches) continue this.callback.Call(Trim(line, "`r`n")) } } until (p == l) } }
Code: Select all
ChromeInst.capabilities.addArg(" --window-size=1920,1080 ")
ChromeInst.capabilities.addArg(" --start-maximized ")
ChromeInst.capabilities.addArg(" --headless ")
ChromeInst.capabilities.addArg(" --ignore-certificate-errors ")
ChromeInst.capabilities.addArg(" --allow-running-insecure-content ") ;needed for headless
ChromeInst.capabilities.addArg(" --disable-gpu ")
ChromeInst.capabilities.addArg(" --user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36 ")
C:\Users\username\AppData\Local\Google\Chrome\User Data was now being generated in
C:\Users\username\AppData\Local\Google\Chrome\User Data\Default instead.
Not sure if that is intended behavior or an error on my part, but hopefully that knowledge will save some trouble :p
So yea, be sure to point your CLogTailer() function to the proper chrome_debug.txt log file path in headless mode
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
thanks awsome ...!pAnDeLa wrote: ↑13 Jul 2022, 07:00If you want to do this in headless mode, you'll need the flags:pAnDeLa wrote: ↑06 Jul 2022, 20:49
Thanks for getting back, I did a lot of digging and was able to find a flag that actually logs js console messages!
That flag being --webview-log-js-console-messages. While the method you posted into getting the browser log is great and yields far more detailed information, I have a quick solution as well The chrome_debug.log file generated by chrome is deleted every time you reopen chrome too. If I recall you must use the Default or current Chrome Profile in Rufaydium as well.
Here's a working example of js callbacks in Rufaydium & Chrome, thanks again for this amazing libraryCode: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #Include Rufaydium.ahk #SingleInstance,Force if (A_Args.Length() = 0) { Run, "C:\Program Files\AutoHotkey\AutoHotkeyU64.exe" %A_ScriptFullPath% 1 ExitApp } Chrome_Log := new CLogTailer("C:\Users\uername\AppData\Local\Google\Chrome\User Data\chrome_debug.log", Func("ReadLog")) ReadLog(Console_Output){ ;ToolTip % "New line added @ " A_TickCount ": " text if RegExMatch(Console_Output,"hello world!") { msgbox, Houston we have lift off! gosub, DoStuff } } /* Load "chromedriver.exe" from "A_ScriptDir" In case Driver is not yet available, it will Download "chromedriver.exe" into "A_ScriptDir" before starting the Driver. */ ChromeInst := new Rufaydium("chromedriver.exe", "--port=9515") ChromeInst.capabilities.setUserProfile("Default") ;use Default chrome profile ChromeInst.capabilities.addArg(" --enable-logging ") ;enable chrome_debug.log file ChromeInst.capabilities.addArg(" --v=0 ") ;needed for above logging flag to work ChromeInst.capabilities.addArg(" --webview-log-js-console-messages ") ;this undocumented flag is the peace de la resistance we need for js/console to ahk callbacks to work /* Create new session if WebBrowser Version Matches the Webdriver Version. It will ask to download the compatible WebDriver if not present. */ Page := ChromeInst.NewSession() ;Page := ChromeInst.NewSession("C:\Program Files\Google\Chrome\Application\chrome.exe") ;Page.CDP.call("Console.enable") ;not needed in this case Page.Navigate("https://www.autohotkey.com/docs/AutoHotkey.htm") ; navigate to url sleep, 1000 gosub, InjectJS return DoStuff: Settings := Page.getElementsByClassName("settings")[0] ;open settings page Settings.Click() msgbox, We did stuff! return ;https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ;https://www.autohotkey.com/boards/viewtopic.php?style=17&p=306235#p306235 InjectJS: JS_MutationObserver = ( function init() { if (window.MutationObserver) { startMutationObserver(); } else { startMutationEvents(); } } function startMutationObserver() { // target node to be observed var target = document.querySelector('body'); // mutation observer config object with the listeners configuration var config = listenOnlyAttributeChanges(); // mutation observer instantiation var mutationObs = new MutationObserver(callbackAttributeChange); // observe initialization mutationObs.observe(target, config); } function listenOnlyAttributeChanges() { return { attributes: true, childList: true, subtree: true }; } function callbackAttributeChange(mutations, mutationObs) { for (var i = 0, length = mutations.length; i < length; i++) { var mutation = mutations[i]; if (mutation.type === 'attributes' && mutation.attributeName === 'style') { var target = mutation.target; console.log(target.id + target.style.display); console.log("---" + target.id + target.class); //test console.log("hello world!"); } } } var addedNodes = 0; var colorpage = false; init(); ) ;Inject Mutation Observer Page.CDP.Evaluate(JS_MutationObserver) return F12:: ChromeInst.QuitAllSessions() ; close all session ChromeInst.Driver.Exit() ; then exits driver Process,Close,chromedriver.exe ;force closer driver ExitApp ;https://www.autohotkey.com/boards/viewtopic.php?t=47894#p215692 class CLogTailer { __New(logfile, callback){ this.file := FileOpen(logfile, "r-d") this.callback := callback ; Move seek to end of file this.file.Seek(0, 2) fn := this.WatchLog.Bind(this) SetTimer, % fn, 100 } WatchLog(){ Loop { p := this.file.Tell() l := this.file.Length line := this.file.ReadLine(), "`r`n" len := StrLen(line) if (len){ RegExMatch(line, "[\r\n]+", matches) if (line == matches) continue this.callback.Call(Trim(line, "`r`n")) } } until (p == l) } }
Its also worth noting that when I used headless mode, the chrome_debug.txt normally located inCode: Select all
ChromeInst.capabilities.addArg(" --window-size=1920,1080 ") ChromeInst.capabilities.addArg(" --start-maximized ") ChromeInst.capabilities.addArg(" --headless ") ChromeInst.capabilities.addArg(" --ignore-certificate-errors ") ChromeInst.capabilities.addArg(" --allow-running-insecure-content ") ;needed for headless ChromeInst.capabilities.addArg(" --disable-gpu ") ChromeInst.capabilities.addArg(" --user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36 ")
C:\Users\username\AppData\Local\Google\Chrome\User Data was now being generated in
C:\Users\username\AppData\Local\Google\Chrome\User Data\Default instead.
Not sure if that is intended behavior or an error on my part, but hopefully that knowledge will save some trouble :p
So yea, be sure to point your CLogTailer() function to the proper chrome_debug.txt log file path in headless mode
btw no spaces on both ends are needed for commandline swicths/args
Code: Select all
ChromeInst.capabilities.addArg("--disable-gpu") ; no space needed
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
Just Implemented Action Class, did following test
Code: Select all
#Include, %A_ScriptDir%\..\Rufaydium-Webdriver
#include Rufaydium.ahk
goto, TestKeyboard
return
clickTest:
URL := "https://quickdraw.withgoogle.com"
page := GetRufaydium(URL) ; run/access chrome browser
MouseEvent := new mouse()
;MouseEvent.click(0, 400, 400)
;MouseEvent.click(1, 200, 300)
MouseEvent.press()
MouseEvent.move(288,258,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.move(391,181,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.move(493,258,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.move(454,358,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.move(328,358,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.move(288,258,10)
MouseEvent.release()
MouseEvent.press()
MouseEvent.release()
msgbox, move drawing window and click ok to draw
x := page.actions(MouseEvent)
return
ScrollTest:
URL := "https://www.autohotkey.com/boards/"
page := GetRufaydium(URL) ; run/access chrome browser
WheelEvent := new Scroll()
return
down::
page.scrollDown()
return
up::
page.scrollup()
return
TestKeyboard:
URL := "https://www.autohotkey.com/boards/"
page := GetRufaydium(URL) ; run/access chrome browser
e := Page.querySelector("#keywords")
e.focus()
page.sendkey("aBcd")
page.sendkey("xyZ")
return
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
- hotcheesesoup
- Posts: 34
- Joined: 08 May 2022, 01:41
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
@Xeo786
Very cool! I'll have to check this out. The site we use at work has hidden fields that require injecting a JSON object, so it's really a pain to automate them. Maybe sending keystrokes instead would get around that limitation.
Very cool! I'll have to check this out. The site we use at work has hidden fields that require injecting a JSON object, so it's really a pain to automate them. Maybe sending keystrokes instead would get around that limitation.
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
It was complicated to create case-sensitive/proper/overcomplicated JSON object. It took to so much time to find the correct JSON parameters/formations.hotcheesesoup wrote: ↑19 Jul 2022, 09:21@Xeo786
Very cool! I'll have to check this out. The site we use at work has hidden fields that require injecting a JSON object, so it's really a pain to automate them. Maybe sending keystrokes instead would get around that limitation.
Now we have Action.ahk to simplifies JSON objects creation.
Spoiler
You can take multiple events i.e.
Code: Select all
Page.Actions(MouseEvent, KeyboardEvent, ScrollEvent, Mouse2Event) ; can add more / will be triggered from left to right
Edit: fixed mistake in code
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
- hotcheesesoup
- Posts: 34
- Joined: 08 May 2022, 01:41
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
@Xeo786
Here's an example of the JSON payload I'm injecting into a hidden "ClientState" field. Typically the value of the hidden field doesn't even show up until you focus the Input field and physically type text into it.
This works for most of the hidden fields, but sometimes it is easier to just focus the Input field and send simulated keystrokes then hit Tab a few times to make it trigger the hidden ClientState value.
The old version of our program didn't do any data validation until you submitted, and didn't require the JSON payload, so you could edit fields without even being in Edit mode, etc.
I will give the new stuff a shot when I have a chance and report back!
Here's an example of the JSON payload I'm injecting into a hidden "ClientState" field. Typically the value of the hidden field doesn't even show up until you focus the Input field and physically type text into it.
Code: Select all
hiddenValue = {"logEntries":[],"value":"15","text":"Pending","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}
Session.CDP.Evaluate("document.getElementById('ctl00_Detail_ApplicationStatus_Input').value = 'Pending'")
Session.CDP.Evaluate("document.getElementById('ctl00_Detail_ApplicationStatus_ClientState').value = '" hiddenValue "'")
The old version of our program didn't do any data validation until you submitted, and didn't require the JSON payload, so you could edit fields without even being in Edit mode, etc.
I will give the new stuff a shot when I have a chance and report back!
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
No need to use CDP, You can use page.ExecuteSync(JS) to execute any JS and Element.execute(JS) evaluate JS on page but you can access element pointer as arguments[0] please look into WDElements.ahk for examples, now WDElements class can have much control over elements, i.e. you can use .focus(), change .innetText, .id, .class, .Title, .Name, .innerHTML, .outerHTML and any attribute/ property using .Execute()hotcheesesoup wrote: ↑19 Jul 2022, 11:14@Xeo786
Here's an example of the JSON payload I'm injecting into a hidden "ClientState" field. Typically the value of the hidden field doesn't even show up until you focus on the Input field and physically type text into it.
This works for most of the hidden fields, but sometimes it is easier to just focus the Input field and send simulated keystrokes then hit Tab a few times to make it trigger the hidden ClientState value.Code: Select all
hiddenValue = {"logEntries":[],"value":"15","text":"Pending","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false} Session.CDP.Evaluate("document.getElementById('ctl00_Detail_ApplicationStatus_Input').value = 'Pending'") Session.CDP.Evaluate("document.getElementById('ctl00_Detail_ApplicationStatus_ClientState').value = '" hiddenValue "'")
The old version of our program didn't do any data validation until you submitted and didn't require the JSON payload, so you could edit fields without even being in Edit mode, etc.
I will give the new stuff a shot when I have a chance and report back!
Can you please try these and share the results
Code: Select all
hiddenValue = {"logEntries":[],"value":"15","text":"Pending","enabled":true,"checkedIndices":[],"checkedItemsTextOverflows":false}
e := Page.getElementById("ctl00_Detail_ApplicationStatus_Input")
e.focus()
; tests
e.value := hiddenValue ; try setting simply
e.value := json.load(hiddenValue) ; try setting json Object you can also do/use ":=" >> e.value := {"logEntries".....
e.execute("arguments[0].value = '" hiddenValue "'") ; execute JS on element and element pointer will be 'arguments[0]'
; no need for CDP rufaydium Basic manipulate element
Page.ExecuteSync("document.getElementById('ctl00_Detail_ApplicationStatus_ClientState').value = '" hiddenValue "'")
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
Is this possible in Rufaydium too?
I'm able to connect to an already opened Chromium browser via Chrome.ahk using this simple script, but am uncertain how to do the same in Rufaydium
I'm able to connect to an already opened Chromium browser via Chrome.ahk using this simple script, but am uncertain how to do the same in Rufaydium
Code: Select all
#Include Chrome.ahk ; https://github.com/G33kDude/Chrome.ahk
Chrome := {"base": Chrome, "DebugPort": 8080}
TabInst := Chrome.GetPage()
TabInst.Evaluate("alert('Hello World!');")
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
You can Access Browser Session created using Webdriver only, just like Chrome.ahk, which needs chrome to run in debugging modepAnDeLa wrote: ↑20 Jul 2022, 02:18Is this possible in Rufaydium too?
I'm able to connect to an already opened Chromium browser via Chrome.ahk using this simple script, but am uncertain how to do the same in Rufaydium
Code: Select all
#Include Chrome.ahk ; https://github.com/G33kDude/Chrome.ahk Chrome := {"base": Chrome, "DebugPort": 8080} TabInst := Chrome.GetPage() TabInst.Evaluate("alert('Hello World!');")
Following function is a good example for getting page once created using webdriver
Code: Select all
Page := GetRufaydium("https://github.com/G33kDude/Chrome.ahk")
Msgbox, % Page.Title "`n" Page.URL "`n`n run this code again to acces same page `n`n Press f12 to quit Page and driver"
return
f12::
Chrome := new Rufaydium()
Chrome.QuitAllSessions() ; close all session
Chrome.Driver.Exit() ; then exits driver
msgbox, all session closed and Driver Exitted
return
; GetRufaydium(URL) gets existing session
; stops us creatting multiple sessions again and again
; make sure do not manually close driver / chrome.driver.exit()
; by Xeo786
GetRufaydium(URL)
{
; get chrome driver / runs chrome driver if not running, download driver if available in A_ScriptDir
; Run Chrome Driver with default parameters and loads deafult capabilities
Chrome := new Rufaydium()
Page := Chrome.getSessionByUrl(URL) ; check page (created by driver) if already exist
if !isobject(page) ; checcking if Session with url exist
{
Page := Chrome.getSession(1,1) ; try getting first session first tab
if isobject(page) ; if exist
Page.NewTab() ; create new tab instead new session
else ; if does not exist
Page := Chrome.NewSession() ; create new session ; Page.Exit() if any session manually closed by user which causes lag
Page.Navigate(URL) ; navigate
}
return page
}
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
-
- Posts: 26
- Joined: 23 Dec 2018, 00:40
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
Can I hide the chrome browser like run in background
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
you need to run chrome in headlessmode
example
Code: Select all
#include Rufaydium.ahk
Chrome := new Rufaydium()
Chrome.Capabilities.HeadlessMode := true
Page := Chrome.NewSession()
Page.url := "https://www.autohotkey.com/boards"
Msgbox, % Page.Title "`n" Page.URL "`n`n Press f12 to quit Page and driver"
return
f12::
Chrome := new Rufaydium()
Chrome.QuitAllSessions() ; close all session
Chrome.Driver.Exit() ; then exits driver
msgbox, all session closed and Driver Exitted
return
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
I didn't get this code to work:
Also didn't understood about that GetRufaydium, is it a new function or just an example? Couldn't find it.
I also would love if you give me an example to Send a key to the page, not an element, like an Arrow Down, PageUp, etc. I'm not sure if is possible with this new Action Class, tried following your example, but also didn't work.
Thank you! Your library is amazing and is helping a lot everyday
Code: Select all
#Include, %A_ScriptDir%\..\Rufaydium-Webdriver
#include Rufaydium.ahk
URL := "https://www.autohotkey.com/boards/"
page := Navigate(URL) ; run/access chrome browser
WheelEvent := new Scroll()
page.scrollDown()
return
I also would love if you give me an example to Send a key to the page, not an element, like an Arrow Down, PageUp, etc. I'm not sure if is possible with this new Action Class, tried following your example, but also didn't work.
Thank you! Your library is amazing and is helping a lot everyday
Re: Rufaydium WebDriver 1.6.3 (no selenium/websocket)
Please Read Documentation how to use Rufaydiumnoslined wrote: ↑22 Jul 2022, 19:20I didn't get this code to work:
Also didn't understood about that GetRufaydium, is it a new function or just an example? Couldn't find it.Code: Select all
#Include, %A_ScriptDir%\..\Rufaydium-Webdriver #include Rufaydium.ahk URL := "https://www.autohotkey.com/boards/" page := Navigate(URL) ; run/access chrome browser WheelEvent := new Scroll() page.scrollDown() return
I also would love if you give me an example to Send a key to the page, not an element, like an Arrow Down, PageUp, etc. I'm not sure if is possible with this new Action Class, tried following your example, but also didn't work.
Thank you! Your library is amazing and is helping a lot everyday
1) Rufaydium uses webdriver, it can download/load various webdrive by creating New Rufaydium("DriverName") instance, reference
1.1) it is optional, you can use capabilities to invoke specific browser options like incognito mode, etc.
2) After Creating New Rufaydium instance you need to Run Browser/create Page, by using NewSession() Method,
2.2 You can also access already create Rufaydium session by using various methods see this
Now you are ready to automate Browser using various Session methods,
Code: Select all
#include Rufaydium.ahk
Chrome := new Rufaydium() ; first you need to load driver here we are loading Chrome driver
Page := Chrome.NewSession() ; then we need to create session, Session will open chrome page
Page.url := "https://www.autohotkey.com/boards" ; same as Page.Navigate(URL) this is how we navigate to page script will wait till page fully loaded
page.scrollDown() ; then we scroll down .....
;you can also use scroll event which actually doing what 'page.scrollDown()' just did
WheelEvent := new Scroll()
WheelEvent.ScrollDown(s)
Page.Actions(WheelEvent)
return
f12::
Chrome := new Rufaydium()
Chrome.QuitAllSessions() ; close all session
Chrome.Driver.Exit() ; then exits driver
msgbox, all session closed and Driver Exitted
return
Last edited by Xeo786 on 27 Jul 2022, 00:36, edited 1 time in total.
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
-
- Posts: 6
- Joined: 12 Apr 2022, 12:57
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
hello. Is there a way to control the chrome browser that is already turned on? I wrote the script like this, but it doesn't get the Title.
Code: Select all
Chrome := new Rufaydium("chromedriver.exe")
Page := Chrome.getSessionByURL("https://www.autohotkey.com/boards/viewtopic.php?f=6&t=102616&hilit=rufaydium")
Msgbox, % Page.Title
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
Try
Code: Select all
url:="https://www.autohotkey.com/boards/viewtopic.php?f=6&t=102616&hilit=rufaydium"
Browser:=new Rufaydium()
Page:=Browser.NewSession()
Page.Navigate(url)
Session:=Browser.getSessionByUrl(url)
Msgbox, % Session.Title
-
- Posts: 6
- Joined: 12 Apr 2022, 12:57
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
That script opens new browser, is there any way to control which browser is already openned?
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
No, you can't. Normally running Browser is not a Webdriver Session.1apsalman1 wrote: ↑26 Jul 2022, 15:57That script opens new browser, is there any way to control which browser is already openned?
"When there is no gravity, there is absolute vacuum and light travel with no time" -Game changer theory
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
My apologies, but I've back with same problem.
What I have:
* Chrome 103, updating showing the last version. Does 64-bit fine?
* Win11, 64 bit
* Manually downloaded and putted cromedriver for chrome 103. I've put it to \chromedriver_win32\file.ahk folder
Whats wrong:
If I use
- no any visible effect, but I see an activity in processes dispetch
Using this:
...I see an error as in attached image.
What I do wrong?
What I have:
* Chrome 103, updating showing the last version. Does 64-bit fine?
* Win11, 64 bit
* Manually downloaded and putted cromedriver for chrome 103. I've put it to \chromedriver_win32\file.ahk folder
Whats wrong:
If I use
Code: Select all
Chrome := new Rufaydium() ; default will load driver
Page := Chrome.NewSession()
Page.Navigate("https://www.autohotkey.com/")
return
f12::
Chrome.QuitAllSessions() ; close all session
Chrome.Driver.Exit() ; then exits driver
return
Using this:
Code: Select all
#include Rufaydium.ahk
Chrome := new Rufaydium() ; first you need to load driver here we are loading Chrome driver
Page := Chrome.NewSession() ; then we need to create session, Session will open chrome page
Page.url := "https://www.autohotkey.com/boards" ; same as Page.Navigate(URL) this is how we navigate to page script will wait till page fully loaded
page.scrollDown() ; then we scroll down .....
;you can also use scroll event which actually doing what 'page.scrollDown()' just did
WheelEvent := new Scroll()
WheelEvent.ScrollDown(s)
Page.Actions(WheelEvent)
return
f12::
Chrome := new Rufaydium()
Chrome.QuitAllSessions() ; close all session
Chrome.Driver.Exit() ; then exits driver
msgbox, all session closed and Driver Exitted
return
What I do wrong?
- Attachments
-
- Screenshot_25.png (24.49 KiB) Viewed 3838 times
-
- Posts: 104
- Joined: 07 Aug 2015, 15:53
Re: Rufaydium WebDriver 1.7.0 (no selenium/websocket)
Can i wait user to click a specified button and than continue?