Exit Posted March 12, 2019 Share Posted March 12, 2019 (edited) Edit: Solved using UIAWrappers UDF. See 4th post in this thread. ==================================================== I'm new to Chrome browser and WebDriver UDF. I want to control an existing instance of chrome browser, but it fails. I dont know how to attach to an existing instance. Is it possible? This code runs perfectly since the browser instance is created by WebDrver UDF: #include "wd_core.au3" #include "wd_helper.au3" _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"') _WD_Startup() $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true }}}}' $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Navigate($sSession, "http://www.h--e.de") Sleep(2000) ; time to see the login page $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='kennwort']") _WD_ElementAction($sSession, $sElement, "value", "Autoit") MsgBox(64 + 262144, Default, "Press OK to exit", 0) _WD_DeleteSession($sSession) _WD_Shutdown() But when I try to attach to an existing instance, it fails: #include "wd_core.au3" #include "wd_helper.au3" $pid = ShellExecute("chrome.exe", "http://h--e.de") ; create a chrome browser instance to simulate a already existing page _WD_Option('Driver', 'chromedriver.exe') _WD_Option('Port', 9515) _WD_Option('DriverParams', '--log-path="' & @ScriptDir & '\chrome.log"') _WD_Startup() $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true }}}}' $sSession = _WD_CreateSession($sDesiredCapabilities) _WD_Attach($sSession, "Login") ; try to attach to the already started instance. Does NOT function :-( Sleep(2000) $sElement = _WD_FindElement($sSession, $_WD_LOCATOR_ByXPath, "//input[@id='kennwort']") _WD_ElementAction($sSession, $sElement, "value", "Autoit") MsgBox(64 + 262144, Default, "Press OK to exit", 0) _WD_DeleteSession($sSession) _WD_Shutdown() ProcessClose($pid) How can I connect/attach to an existing instance? TIA Exit Edited March 18, 2019 by Exit Set thread solved App: Au3toCmd UDF: _SingleScript() Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted March 12, 2019 Moderators Share Posted March 12, 2019 Moved to the appropriate forum, as the AutoIt Example Scripts forum very clearly states: Quote Share your cool AutoIt scripts, UDFs and applications with others. Do not post general support questions here, instead use the AutoIt Help and Support forums. Moderation Team Exit 1 "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
Danp2 Posted March 13, 2019 Share Posted March 13, 2019 This has come up before in the support thread. AFAIK, while you can do this with Firefox, this isn't possible with Chrome. Exit 1 Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
Exit Posted March 16, 2019 Author Share Posted March 16, 2019 (edited) On 3/13/2019 at 1:03 AM, Danp2 said: This has come up before in the support thread. AFAIK, while you can do this with Firefox, this isn't possible with Chrome. It is possible with Chrome You just have to elevate Chrome browser to force accessibility expandcollapse popup#include "UIAWrappers.au3" If Not ProcessExists("chrome.exe") Then $pid = ShellExecute("chrome.exe", "h--e.de") Sleep(500) EndIf $oLogin = _UIA_getFirstObjectOfElement($UIA_oDesktop, "name:=Login - Google Chrome", $treescope_subtree) If Not IsObj($oLogin) Then Exit MsgBox(16 + 262144, Default, "No Login Page found. Press OK to exit.", 0) $oPassword = _UIA_getFirstObjectOfElement($oLogin, "title:=Enter your Id", $treescope_subtree) If Not IsObj($oPassword) Then $pid = ShellExecute("chrome.exe", " about:blank ") Sleep(100) $oBlamk = _UIA_getFirstObjectOfElement($UIA_oDesktop, "name:=about:blank - Google Chrome", $treescope_subtree) Switch @OSLang Case "0407" ; German - Germany $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Adress- und Suchleiste", $treescope_subtree) Case "0409" ; English - United States $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Address and search bar", $treescope_subtree) Case "0413" ; Dutch - Netherlands $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Adres- en zoekbalk", $treescope_subtree) Case "040c" ; French - France $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Barre d'adresse et de recherche", $treescope_subtree) Case "040A" ; Spanish - Spain $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Barra de direcciones y de búsqueda", $treescope_subtree) Case "0410" ; Italian - Italy $oAddressBar = _UIA_getFirstObjectOfElement($oBlamk, "title:=Barra degli indirizzi e di ricerca", $treescope_subtree) Case Else Exit MsgBox(16 + 262144, Default, "Address bar title not found due to unsupported language. Press OK to exit", 0) EndSwitch Sleep(100) _UIA_action($oAddressBar, "setfocus") ;~ chrome://accessibility "--force-renderer-accessibility" _UIA_action($oAddressBar, "setvalue using keys", "chrome://accessibility{ENTER}") $oAccess = _UIA_getFirstObjectOfElement($UIA_oDesktop, "name:=Accessibility Internals - Google Chrome", $treescope_subtree) _UIA_action($oAccess, "setvalue using keys", "{TAB}{Space}{up}{down}{TAB}{TAB}{Space}^w") $oLogin = _UIA_getFirstObjectOfElement($UIA_oDesktop, "name:=Login - Google Chrome", $treescope_subtree) _UIA_action($oLogin, "setfocus") $oPassword = _UIA_getFirstObjectOfElement($oLogin, "title:=Enter your Id", $treescope_subtree) EndIf Sleep(100) _UIA_action($oPassword, "setfocus") _UIA_action($oPassword, "sendkeys", "autoit") Sleep(1000) MsgBox(64 + 262144, Default, "AutoIt index page loaded successful. Press OK to exit and run the script again. It will run faster since the accessability enviroment is already loadad. Don't close the LOGIN window.", 0) _UIA_action($oLogin, "sendkeys", "!{left}") Exit ; End of Script Drop me a note if you need it in another language. Edited March 16, 2019 by Exit added langues LarsJ and duzers 2 App: Au3toCmd UDF: _SingleScript() Link to comment Share on other sites More sharing options...
Danp2 Posted March 17, 2019 Share Posted March 17, 2019 @Exit Can you explain (or even better show in code) how this would allow an existing Chrome instance to be "attached" via the Webdriver UDF? Exit 1 Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
Exit Posted March 18, 2019 Author Share Posted March 18, 2019 1 hour ago, Danp2 said: @Exit Can you explain (or even better show in code) how this would allow an existing Chrome instance to be "attached" via the Webdriver UDF? It seems not possible with the Webdriver UDF, 🙁 but with the UIAWrappers UDF 🙂 See my sample above. Since I need to work with already running Chrome instances, I will use UIAWrappers UDF fom now on. App: Au3toCmd UDF: _SingleScript() Link to comment Share on other sites More sharing options...
Danp2 Posted March 18, 2019 Share Posted March 18, 2019 @Exit OIC. Thanks for clarifying. Exit 1 Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
JohnWIlling Posted December 11, 2019 Share Posted December 11, 2019 I found a simple solution to reconnect to an existing chromedriver. Once the driver is loaded, the "session id" is returned. Subsequent communication is via TCP to the defined port while passing in the session id. Global $sSessionFileName = "Session.ID" $sSession = _WD_CreateSession($sDesiredCapabilities) If @error <> $_WD_ERROR_Success Then Exit -1 EndIf FileWrite($sSessionFileName, $sSession & @CRLF) What I've done is to write out to a file the value of the sessionid following the call to _WD_CreateSession. Then when restarting an new app, I would call the following: Func _WD_ReAttach($Type) Local Const $sFuncName = "_WD_ReAttach" Switch $Type Case $eFireFox SetupFireFox() Case $eChrome SetupChrome() Case $eEdge SetupEdge() EndSwitch Local $pFile = FileOpen($sSessionFileName, 0) If (@error = 0) Then $sSession = FileReadLine($pFile) EndIf EndFunc ;==>_WD_ReAttach Which sets up the _WD_Option then reads in the saved session string. I can then continue interacting with the Chrome driver.... John W. MarkIT, Exit and Remie9 1 1 1 Link to comment Share on other sites More sharing options...
Danp2 Posted December 11, 2019 Share Posted December 11, 2019 @JohnWIlling Unfortunately, that still won't allow you to connect to an instance of Chrome that wasn't launched with Chromedriver. Exit and SkysLastChance 2 Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
RDE Posted August 7, 2021 Share Posted August 7, 2021 On 12/11/2019 at 10:30 PM, Danp2 said: @JohnWIlling Unfortunately, that still won't allow you to connect to an instance of Chrome that wasn't launched with Chromedriver. This quote comes from post: https://www.autoitscript.com/forum/topic/198161-solved-how-to-attach-to-an-already-running-chrome-instance/ I don't want to connect to an existing instance of Chrome but I do want to run a second instance that is launched with Chromedriver. I can launch a first instance with Chromedriver and then a second one manually. That works well but when I close that first instance, my second instance gets closed as well. At the moment, I am in the debugging phase so frequently need to stop and restart. It feels like I should be able to add something to $sDesiredCapabilities to allow this but I haven't been able to find anything helpful. Do you it's possible to work with independent instances? I am using $sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"goog:chromeOptions": {"w3c": true, "excludeSwitches": [ "enable-automation"], "useAutomationExtension": false, "args":["--user-data-dir=C:\\Users\\' & @UserName & '\\AppData\\Local\\Google\\Chrome\\User Data\\", "--profile-directory=Default"]}}}}' currently. Link to comment Share on other sites More sharing options...
Danp2 Posted August 7, 2021 Share Posted August 7, 2021 My guess is that your issues are related to both instances using the same profile. Have you tried it without the user-data-dir portion? Latest Webdriver UDF Release Webdriver Wiki FAQs Link to comment Share on other sites More sharing options...
RDE Posted August 12, 2021 Share Posted August 12, 2021 Sorry for the late response, lots going on Thanks for that. You're right, it works without the user-data-portion. Now to work out how to log on to the site programmatically! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now