我正在使用Selenium Chromedriver通过Microsoft Excel VBA创建一个程序。该程序旨在从电子表格中获取信息,创建链接,然后打开页面并使用电子表格中的信息填写表单字段。我已经能够让大多数功能正常工作,只需一个烦人的打嗝。每次程序打开新链接时,网站都会将我从我的个人资料中注销,并将其返回到默认的访客个人资料。
Sub startingout()
Dim URL As String
Dim driver As New WebDriver
driver.Start "Chrome", ""
driver.Get "https://website.com/default.aspx"
driver.FindElementByName("ctl00$LoginForm$UserName").SendKeys ("username")
driver.FindElementByName("ctl00$LoginForm$Password").SendKeys ("password")
driver.FindElementByName("ctl00$LoginForm$LoginButton").Click
URL = "https://website.com/specificURL"
Call secondtest(driver, URL)
End Sub
Sub secondtest(driver As WebDriver, URL As String)
driver.Get URL
driver.FindElementByName("ctl00$ContentPlaceHolder1$lvItems$ctrl0$TextBoxQty").SendKeys ("1")
driver.FindElementByName("ctl00$ContentPlaceHolder1$lvItems$ctrl0$btnAddCart").Click
Application.Wait (Now + TimeValue("0:00:01"))
driver.FindElementByName("ctl00$ContentPlaceHolder1$btnContinue").Click
Application.Wait (Now + TimeValue("0:00:1"))
End Sub
以上是工作正常的测试代码。我保持登录状态。实际程序是一个子过程,它在创建链接时调用其他三个子过程之一。以下是我如何开始主要的子程序,以加载网站。
Dim driver As New WebDriver
driver.Start "Chrome", ""
driver.Get "https://website.com/default.aspx"
driver.FindElementByName("ctl00$LoginForm$UserName").SendKeys ("username")
driver.FindElementByName("ctl00$LoginForm$Password").SendKeys ("password")
driver.FindElementByName("ctl00$LoginForm$LoginButton").Click
创建链接后,它将移动到另一个子过程,该过程按如下所示启动:
Sub FullBar(URL As String, Quantity As Integer, CurRow As Integer, driver As
WebDriver)
Dim gotit As Boolean
gotit = False
driver.Get URL
Application.Wait (Now + TimeValue("0:00:01"))
现在看来,这两种情况并没有根本的不同,但它们的行为就像它们一样。奇怪的是,当我仅使用VBA和一些测试链接创建测试程序时,我能够保持登录状态。为什么会这样,是什么让这两种情况有所不同?
我真的不知道为什么会发生这种情况,但我确实找到了解决方案。我关注了这个页面:
https://www.reddit.com/r/vba/comments/a63c2k/open_chrome_and_set_profile_with_chromedriver/
我创建了一个新的 chrome 配置文件并从那里加载,添加了
bot.addArguments("--no-sandbox")
到代码。可能是硒不喜欢使用默认程序或其他东西。无论如何,我让它工作并保持登录状态。