【发布时间】: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 = vbCancel,chrome在函数退出时会退出范围吗?不过,这永远不会成为问题,因为在您的代码中,intCont永远不可能等于vbCancel。但至于你的问题?不知道,不能走那么远。 -
对不起,我在这个问题中简化了
MsgBox语句以提高可读性,并忘记了第一个双引号,但它们在我的代码中。关于范围,您给了我一个见解:使驱动程序成为具有更广泛范围的变量应该是一个有用的转变(但最好能够在不放弃身份验证的情况下打开 chrome)。关于vbCancel,在我的代码中,MsgBox语句是vbOKCancel + vbCritical,因此当用户取消它时,它会按预期进行评估,退出函数。感谢您的帮助!
标签: excel vba selenium selenium-chromedriver