【问题标题】:Keep connection when using ChromeDriver in websites which require authentication在需要身份验证的网站中使用 ChromeDriver 时保持连接
【发布时间】:2020-03-12 11:56:26
【问题描述】:

我正在使用 VBA 和 Selenium ChromeDriver 在需要身份验证的网站中抓取数据。

问题是,ChromerDriver 似乎会在代码中断时重新启动(即使它不是错误,例如当应用程序要求用户输入时)。

' Loads search page
Set chrome = New Selenium.ChromeDriver

Do
    chrome.get sfSearchURL

    If chrome.URL <> sfSearchURL Then 'If it is not in desired search page, prompts user to log in.
        intCont = MsgBox ("Log in and click OK")

        If intCont = vbCancel Then
            strErrorMsg = "Not logged in"
            Exit Function
        End If

    End If

Loop Until chrome.URL = sfSearchURL

当我在未登录的情况下加载搜索页面时,服务器会改为加载登录页面。

问题是:

首先,每次我打开 ChromeDriver 时,它都会打开一个新会话并忘记身份验证,所以我无法进行会话,必须在每次执行搜索功能时重新登录。

第二,当 VBA 显示 MsgBox 并且用户单击 OK 时,变量 chrome 失去了到对象的链接,并且在下一行 (Loop Until) 我得到

运行时错误 0:WebRequestError 无法连接到远程服务器

【问题讨论】:

  • intCont = MsgBox (Log in and click OK") 不应该编译。 chrome 是在本地声明的,所以如果intCont = vbCancelchrome 在函数退出时会退出范围吗?不过,这永远不会成为问题,因为在您的代码中,intCont 永远不可能等于 vbCancel。但至于你的问题?不知道,不能走那么远。
  • 对不起,我在这个问题中简化了MsgBox 语句以提高可读性,并忘记了第一个双引号,但它们在我的代码中。关于范围,您给了我一个见解:使驱动程序成为具有更广泛范围的变量应该是一个有用的转变(但最好能够在不放弃身份验证的情况下打开 chrome)。关于vbCancel,在我的代码中,MsgBox 语句是vbOKCancel + vbCritical,因此当用户取消它时,它会按预期进行评估,退出函数。感谢您的帮助!

标签: excel vba selenium selenium-chromedriver


【解决方案1】:

我对 HTTP 的了解确实很薄弱,所以我可能并不完全准确,但我认为我已经足够接近让你感动了。

把它移到你的循环之外:

chrome.get sfSearchURL

我怀疑正在发生的事情,是您向Get 提出新会话的请求。 Selenium 对Get 进行了隐式等待,因此创建了会话,并且该会话的 URL 与用作退出条件的 URL 不匹配。当您的代码循环返回时,它会再次调用 Get,这会丢弃您对新请求的会话。

这也会导致分支到 MsgBox,特别是它会在分支之前删除会话。


不过我得问问这个……

“每次我打开 ChromeDriver 时,它都会打开一个新会话并忘记身份验证,所以我无法进行会话,每次执行搜索功能都必须重新登录”

  • “打开 ChromeDriver”究竟是什么意思?您打开它的程度如何?

这一行:

Set chrome = New Selenium.ChromeDriver

...保证放弃之前在chrome 中举行的任何会话并打开一个新会话。这是设计使然,这正是它应该做的和您应该期待的。

如果这是一个更大的循环的一部分,那么这就是一个确凿的证据。

可以从chrome 的一个实例创建新会话,但我使用具有不同接口的自定义类来初始化单独的同时会话,因为它使我的项目更易于管理和一致。

还有。如果您的代码为我们提供最好的帮助,您确实需要包含更多内容。我必须推断和猜测我的方式可能会写或可能不会写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多