我正在使用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和一些测试链接创建测试程序时,就可以保持登录状态。为什么会这样?这两种情况有什么不同?
答案 0 :(得分:0)
我并没有真正弄清楚为什么会发生这种情况,但是我确实找到了解决方案。我关注了此页面:
https://www.reddit.com/r/vba/comments/a63c2k/open_chrome_and_set_profile_with_chromedriver/
我创建了一个新的chrome配置文件并从那里加载,添加了
bot.addArguments("--no-sandbox")
到代码。 Selenium可能不喜欢使用默认程序或其他东西。无论如何,我可以正常使用,并且保持登录状态。