【问题标题】:Send custom user-data-dir when interating with ChromeDriver and MSXML2.ServerXMLHTTP (VBA)与 ChromeDriver 和 MSXML2.ServerXMLHTTP (VBA) 交互时发送自定义用户数据目录
【发布时间】:2021-07-16 21:11:35
【问题描述】:

我正在尝试在 VBA 上使用 ChromeWebDriver 和 MSXML2.ServerXMLHTTP 打开一个 Google Chrome 实例。该代码可以正常打开浏览器的新实例,但是当我尝试向 WebDriver 发送自定义用户数据目录(存储在 D:\Profiles\tdmsoares\Desktop\tmpChromeUserData\User Data 中时,它不起作用:


Private Function SendRequest() As Dictionary
    Dim client As Object
    Set client = CreateObject("MSXML2.ServerXMLHTTP")   'ServerXMLHTTP
    
    client.Open "POST", "http://localhost:9515/session"
    
    client.setRequestHeader "Content-Type", "application/json"
    Dim strJsonRequest As String
    strJsonRequest = 'the comments bellow was made intentionally to show different ways I tried
    'strJsonRequest = "{""capabilities"":{""alwaysMatch:""{""args"":""[--user-data-dir=D:/Profiles/tdmsoares/Desktop/tmpChromeUserData/User Data]""},}""sessionId"":""""}"
    'strJsonRequest = "{""capabilities"":{""args"":""[--user-data-dir=D:\Profiles\tdmsoares\Desktop\tmpChromeUserData\User Data\]""},""sessionId"":""}"
    'strJsonRequest = "{""capabilities"":{},{""desiredCapabilities"":{""args"":""[--user-data-dir=D:\Profiles\tdmsoares\Desktop\tmpChromeUserData\User Data]""},""sessionId"":""""}
    'strJsonRequest = "{""capabilities"":{""userDataDir"":""D:\\Profiles\\tdmsoares\\Desktop\\tmpChromeUserData\\User Data\\]""},""sessionId"":""""}"
    'strJsonRequest = "{""capabilities"":{""goog:chromeOptions:args"":""[--[user-data-dir=D:\\Profiles\\tdmsoares\\Desktop\\tmpChromeUserData\\User Data]""},""sessionId"":""""}

    client.send strJsonRequest

    Do While client.readyState < 4
        DoEvents
    Loop

    Set SendRequest = JsonConverter.ParseJson(client.responseText)
End Function

注意事项:

  1. 当尝试使用Debug.print client.responseTextMSXML2.ServerXMLHTTP 查看对象client 的结果时,我得到:
{"value":{"capabilities":{"acceptInsecureCerts":false,"browserName":"chrome","browserVersion":"91.0.4472.124","chrome":{"chromedriverVersion":"91.0.4472.101 (af52a90bf87030dd1523486a1cd3ae25c5d76c9b-refs/branch-heads/4472@{#1462})","userDataDir":"D:\\Profiles\\tdmsoares\\AppData\\Local\\Temp\\scoped_dir7064_314199858"},"goog:chromeOptions":{"debuggerAddress":"localhost:52688"},"networkConnectionEnabled":false,"pageLoadStrategy":"normal","platformName":"windows","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"dismiss and notify","webauthn:extension:largeBlob":true,"webauthn:virtualAuthenticators":true},"sessionId":"e29d73791d5eec0dfcf2f51426233979"}}

这意味着 user-data-dir 设置为 Temp 虽然尝试更改此设置

  1. 我在 W3.org 和 https://chromedriver.chromium.org/capabilities 上查看了 WebDriver 的文档,但现在我仍然没有找到解决方案

  2. 我没有使用 Selenium(互联网上有很多资源)

【问题讨论】:

    标签: vba google-chrome webdriver msxml httpbrowsercapabilities


    【解决方案1】:

    对于那些面临同样问题的人:

    问题是由于错误的 json 请求。我在再次阅读 W3.org 上的 Webdriver 文档以及 Ish Abb 的这篇很棒的帖子https://dev.to/rookieintraining/understanding-the-selenium-webdriver-o8o 时发现了这一点(谢谢!)并在 curl 上测试它,然后使用 MSXML2.ServerXMLHTTP 在 vba 本身上测试它

    对于旨在使用自定义用户数据目录(除了 URL 之外,例如:http://localhost:9515/session)启动 Google Chrome 的新会话请求,json 对象具有(基于对我有用的):

    {"capabilities":{"firstMatch":[{"goog:chromeOptions":{"args":["user-data-dir=Your path\\\ToCustomProfile"]}}]}}

    或者

    {"capabilities":{"alwaysMatch":{"goog:chromeOptions":{"args":["user-data-dir=Your path\\\ToCustomProfile"]}}}}

    简而言之,我必须考虑它的工作方式不同:

    • user-data-dir 放置时没有双破折号“--”
    • 定义 "alwaysMatch": {}""firstMatch":[] 记住 firstMatch 需要括号 [] 中的列表
    • 在 windows 操作系统中,我们需要在处理文件路径时转义 \
    • user-data-dir 根据 Chrome 驱动程序文档,是 args 的成员goog:chromeOptions 的成员

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多