与网站互动时,Selenium Chromedriver无法保持我的登录状态...有时

时间:2020-06-03 13:42:32

标签: excel vba selenium selenium-chromedriver

我正在使用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和一些测试链接创建测试程序时,就可以保持登录状态。为什么会这样?这两种情况有什么不同?

1 个答案:

答案 0 :(得分:0)

我并没有真正弄清楚为什么会发生这种情况,但是我确实找到了解决方案。我关注了此页面:

https://www.reddit.com/r/vba/comments/a63c2k/open_chrome_and_set_profile_with_chromedriver/

我创建了一个新的chrome配置文件并从那里加载,添加了

bot.addArguments("--no-sandbox")

到代码。 Selenium可能不喜欢使用默认程序或其他东西。无论如何,我可以正常使用,并且保持登录状态。