Excel 使用Selenium VBA提交ESPN登录凭据(修订版)
我试图在Excel VBA代码中使用Selenium来刮取需要登录才能访问的页面。因为我的代码在登录窗口失败,所以我甚至还没有进入到抓取部分。这是ESPN梦幻体育节目的一部分 根据我的问题的第一个版本的反馈,我修改了我的代码以选择正确的iframe并包含一个定时循环(per),但它仍然不起作用。以下是我到目前为止的情况:Excel 使用Selenium VBA提交ESPN登录凭据(修订版),excel,vba,selenium-webdriver,web-scraping,selenium-chromedriver,Excel,Vba,Selenium Webdriver,Web Scraping,Selenium Chromedriver,我试图在Excel VBA代码中使用Selenium来刮取需要登录才能访问的页面。因为我的代码在登录窗口失败,所以我甚至还没有进入到抓取部分。这是ESPN梦幻体育节目的一部分 根据我的问题的第一个版本的反馈,我修改了我的代码以选择正确的iframe并包含一个定时循环(per),但它仍然不起作用。以下是我到目前为止的情况: Sub TestLoginToESPN2() Dim bot As New WebDriver Dim URL As String Dim t As
Sub TestLoginToESPN2()
Dim bot As New WebDriver
Dim URL As String
Dim t As Date
Dim ele As Object
Const WAIT_TIME_SECS As Long = 30
t = Timer
URL = "https://fantasy.espn.com/football/team?leagueId=228988&teamId=10"
With bot
.Start "Chrome"
.Get URL
Do
DoEvents
If Timer - t > WAIT_TIME_SECS Then Exit Do
On Error Resume Next
.SwitchToFrame "disneyid-iframe"
Set ele = .FindElementByCss("input.ng-valid-pattern")
On Error GoTo 0
Loop While ele Is Nothing
If ele Is Nothing Then Exit Sub
ele.SendKeys ("asfdasfd")
Do
DoEvents
If Timer - t > WAIT_TIME_SECS Then Exit Do
On Error Resume Next
.SwitchToFrame "disneyid-iframe"
Set ele = .FindElementByCss("input.ng-valid-parse")
On Error GoTo 0
Loop While ele Is Nothing
If ele Is Nothing Then Exit Sub
ele.SendKeys ("password123")
.FindElementByCss("button.btn").Click
End With
Application.Wait Now + TimeValue("00:00:20")
End Sub
用户名框中只输入用户名的前1或2个字符,输入完整密码,但用户名框(而不是密码框)中也输入完整密码,我不知道按钮单击是否有效,因为密码为空
关于如何修复我的代码有什么建议吗?谢谢 下面是一个简单但有效的代码:
Sub TestLoginToESPN()
Dim bot As New WebDriver
Dim URL As String
Dim t As Date
Dim ele As Object
Const WAIT_TIME_SECS As Long = 30
t = Timer
URL = "https://fantasy.espn.com/football/team?leagueId=228988&teamId=10"
'Login to page
With bot
.Start "Chrome"
.Get URL
.SwitchToFrame "disneyid-iframe"
Do
DoEvents
If Timer - t > WAIT_TIME_SECS Then Exit Do
On Error Resume Next
Set ele = .FindElementByCss("input.ng-valid-pattern")
On Error GoTo 0
Loop While ele Is Nothing
If ele Is Nothing Then Exit Sub
With ele
.SendKeys ("u")
.SendKeys ("sername")
End With
Set ele = .FindElementByXPath("/html/body/div[1]/div/div/section/section/form/section/div[2]/div/label/span[2]/input")
With ele
.SendKeys ("p")
.SendKeys ("assword123")
End With
.FindElementByCss("button.btn").Click 'click enter
End With
Application.Wait Now + TimeValue("00:00:20")
End Sub抱歉,我没有安装Selenium。我将复制Mathieu的评论并询问,您是否考虑过使用?感谢@Profex的建议,但不幸的是ESPN不再发布开发者密钥,因此API访问被关闭。看,我取得了一些进展,我在这里发布,以防它能帮助其他人。我可以通过对上面的代码做2个更改来实现这一点。首先,我用XPath而不是CSS引用密码字段(XPath是/html/body/div[1]/div/div/section/section/form/section/div[2]/div/label/span[2]/input)。第二出于某种原因,我不得不将每个框中的文本条目分成两行,第一行只包含第一个字符,第二行包含其余字符。例如,如果密码是“password123”,那么我需要使用ele.SendKeys(“p”),然后使用ele.SendKeys(“assword123”),一行接一行。我不知道为什么。我相信有更好/更干净的方法可以做到这一点,但上述方法对我很有效,所以我继续前进!