嗨,我是通过VBA接触硒的新手,所以我试图通过登录网页导航并将数据提取到excel文件中来使过程自动化。 根据我的研究,我首先通过单击调用了下拉列表,然后选择选项。
下面是我的代码
Sub Praise()
Dim bot As New WebDriver
bot.Start "chrome"
bot.Get "https://dashboard.stripe.com/login"
bot.FindElementById("email").SendKeys ActiveCell.Value
bot.FindElementById("password").SendKeys ActiveCell.Offset(0, 1).Value
bot.FindElementByTag("form").submit
Application.Wait (Now + TimeValue("0:00:8"))
Set myelement = bot.FindElementByClass("bs-Link", Raise:=False)
If myelement Is Nothing Then
Else
bot.FindElementByClass("bs-Link").Click
End If
bot.FindElementByClass("db-AccountSwitcher-chevron").Click ' to call dropdown
bot.FindElementByClass("Text-color--white Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline").Click ' Error occurs in this line
End Sub
这是调用下拉菜单的代码
<div class="db-AccountSwitcher-button Box-root Flex-flex Flex-alignItems--center">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-activeImage">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--dark Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--noWrap Text-display--inline">Masorini.com</span></div>
<div class="Box-root Margin-left--8">
<div class="db-AccountSwitcher-chevron"></div>
</div>
</div>
这是下拉列表的代码
<div class="ScrollableMenu SearchableList-items" id="searchable-list-results-47" role="listbox" style="max-height: 200px;">
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Masorini.com</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Ariavoss</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Bikinimas</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Diva Noche</span></div>
</div>
</div>
</div>
<div aria-selected="true" role="option">
<div>
<div class="Box-root Box-background--blue Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: rgb(255, 255, 255);"><span class="Text-color--white Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Bootyswim</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Zainno</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Actiwears</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Rockactive</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Cat Lovers</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Chicnuit</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Bootyswim</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Diva Noche</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Bikinimas</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">EpicDevil.co</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">probago.com</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Activepose</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">SiaRose.com</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Sunvoss</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Mosselli</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Aroabikini</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">Swimlemon</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">milewatches</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--fallback"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">stripe-northwrist@massiveshops.com</span></div>
</div>
</div>
</div>
<div aria-selected="false" role="option">
<div>
<div class="Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center" style="cursor: pointer; user-select: none;">
<div class="Box-root Margin-right--8">
<div class="db-AccountSwitcher-accountImage Box-root Box-background--white">
<div class="db-AccountSwitcher-accountImage--content db-AccountSwitcher-accountImage--newAccount"></div>
</div>
</div>
<div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--default Text-fontSize--16 Text-fontWeight--medium Text-lineHeight--24 Text-typeface--base Text-wrap--wrap Text-display--inline">New account</span></div>
</div>
</div>
</div>
</div>
这是错误代码
答案 0 :(得分:1)
对此我不确定单击部分,但是您需要从类名中删除空格以消除该错误
bot.FindElementByCss(".Text-color--white.Text-fontSize--16.Text-fontWeight--medium.Text-lineHeight--24.Text-typeface--base.Text-wrap--wrap.Text-display--inline").Click
以Bootyswim
为目标
如果点击有效,那么您还应该可以使用:
bot.FindElementByXPath("//*[@role='option'][5]").Click
然后,将[5]
更改为其他选项。
尝试使用xpath here并选择其他选项。
答案 1 :(得分:1)
您实际上没有单击下拉列表,然后选择值。您只需将下拉字段设置为所需的值即可。
这是我的小代码段,用于在我需要浏览的网站上进行此操作。
Dim element As Selenium.WebElement
Set element = WaitForElement(byName, "Your element ID here")
element.AsSelect.SelectByText "The exact text that's in the drop down"
第一行调用下面的函数-我遇到了等待网站完成加载的超时问题,因此我写道,它能够智能地等待页面加载,然后放弃找不到元素。
第二行明确将下拉菜单设置为我要寻找的值-无需单击元素并选择。
Private Function WaitForElement(ByVal Method As FindElementBy, ByVal elementID As String) As Selenium.WebElement
Dim startTimer As Single
startTimer = Timer
Dim waitTime As Single
waitTime = this.Driver.Timeouts.ImplicitWait / 100
Dim webBit As Selenium.WebElement
On Error Resume Next 'it is possible that we'll go looking for the element before it's been returned to view, that's fine, we're waiting for it
While webBit Is Nothing And Timer < (startTimer + waitTime)
Select Case Method
Case byClass
Set webBit = this.Driver.FindElementByClass(elementID)
Case byCSS
Set webBit = this.Driver.FindElementByCss(elementID)
Case byID
Set webBit = this.Driver.FindElementById(elementID)
Case byLinkText
Set webBit = this.Driver.FindElementByLinkText(elementID)
Case byName
Set webBit = this.Driver.FindElementByName(elementID)
Case byPartialLinkText
Set webBit = this.Driver.FindElementByPartialLinkText(elementID)
Case byTag
Set webBit = this.Driver.FindElementByTag(elementID)
Case byXPath
Set webBit = this.Driver.FindElementByXPath(elementID)
End Select
Wend
On Error GoTo 0 'resume normal error handling
Set WaitForElement = webBit
End Function