Web驱动程序如何在VBA中选择动态下拉菜单中的选项

Web驱动程序如何在VBA中选择动态下拉菜单中的选项,vba,selenium-webdriver,webdriver,Vba,Selenium Webdriver,Webdriver,我有这个HTML <div class="ui-widget"> <select name="calAlum" style="display: none;">undefined <option value=""></option> <option value="5.0">5.0</option> <option value="5.1">5.1</option> <option value=

我有这个HTML

<div class="ui-widget">
<select name="calAlum" style="display: none;">undefined
<option value=""></option> 
<option value="5.0">5.0</option>
 <option value="5.1">5.1</option> 
<option value="5.2">5.2</option>
 <option value="5.3">5.3</option>
 <option value="5.4">5.4</option>
 <option value="5.5">5.5</option>
 <option value="5.6">5.6</option>
 <option value="5.7">5.7</option>
 <option value="5.8">5.8</option>
 <option value="5.9">5.9</option>
 <option value="6.0">6.0</option>
 <option value="6.1">6.1</option>
 <option value="6.2">6.2</option>
 <option value="6.3">6.3</option>
 <option value="6.4">6.4</option>
 <option value="6.5">6.5</option>
 <option value="6.6">6.6</option>
 <option value="6.7">6.7</option>
 <option value="6.8">6.8</option>
 <option value="6.9">6.9</option>
 <option value="7.0">7.0</option>
 <option value="7.1">7.1</option>
 <option value="7.2">7.2</option>
 <option value="7.3">7.3</option>
 <option value="7.4">7.4</option>
 <option value="7.5">7.5</option>
 <option value="7.6">7.6</option>
 <option value="7.7">7.7</option>
 <option value="7.8">7.8</option>
 <option value="7.9">7.9</option>
 <option value="8.0">8.0</option>
 <option value="8.1">8.1</option>
 <option value="8.2">8.2</option>
 <option value="8.3">8.3</option>
 <option value="8.4">8.4</option>
 <option value="8.5">8.5</option>
 <option value="8.6">8.6</option>
 <option value="8.7">8.7</option>
 <option value="8.8">8.8</option>
 <option value="8.9">8.9</option>
 <option value="9.0">9.0</option>
 <option value="9.1">9.1</option>
 <option value="9.2">9.2</option>
 <option value="9.3">9.3</option>
 <option value="9.4">9.4</option>
 <option value="9.5">9.5</option>
 <option value="9.6">9.6</option>
 <option value="9.7">9.7</option>
 <option value="9.8">9.8</option>
 <option value="9.9">9.9</option>
 <option value="10.0">10.0</option>
 </select>
但是对于这个下拉列表不起作用,我尝试使用不同的方法,但不起作用,注意:如果

“聚焦盒子但不起作用”

“写入值不起作用”

“复制剪贴板中的值,然后将值粘贴到对象中不起作用”

但是如果在对象中手动选择任何值,如“9.8”,则在代码中使用

R= element.value

返回“9.8”,然后我使用

element.asselect.selectbyvalue R  work
但如果我更改R=“9.7”并使用

未找到返回错误值

然后我尝试在selectelemnet中包装webelement

r= element.SelectedOption

r= element.asselect.selectedoption
要知道选择了哪个选项,但由于R=element.value返回“9.8”,所以两个返回void“”显然都很少见

element.asselect.options

for i=0 to element.asselect.options

r(i)=element.asselect.selectedoption

next
要知道所有选项都在selectelement“element”中,但返回错误它需要一个对象,所以请使用

r = element.IsSelected
但是返回false,这意味着我不能使用像webelement这样的对象,如果我将其包装为SelectElement,则该对象没有任何选项,有人可以帮助我


如果您帮助我如何选择对象o如何操作对象“选择”动态CSS选择器:

您可以使用CSS选择器以所选选项为目标,然后
。单击
进行选择。将选项值提取到一个变量中,并将该变量连接到CSS选择器字符串中

您的示例:

对于您的示例,您可以使用选择器
选择选项[value='5.0']
,其中5.0被提取到变量中


下面是一个使用Facebook并选择下拉日期作为生日的示例

Facebook生日日CSS选择器:

#day option[value='18']

该元素的id为
“day”
,包含标签
选项
,属性为
,即
=18
#
是id选择器,
[]
是属性选择器


VBA代码:
选项显式
公共子对象选择()
dimdaswebdriver
设置d=新的色度驱动器
常量URL=”https://www.facebook.com/"
所选常量_索引长度=18
与d
.启动“Chrome”
.获取URL
'选择器为,例如第1天“#天选项[value='1']”
.FindElementByCss(“#天选项[value=”&选定的_索引&“]”)。单击
停下来
element.asselect.selectbyvalue R  work
element.asselect.selectbyvalue R
r= element.SelectedOption

r= element.asselect.selectedoption
element.asselect.options

for i=0 to element.asselect.options

r(i)=element.asselect.selectedoption

next
r = element.IsSelected
CONST SELECTED_INDEX As String = "5.0"
WEB3.FindElementByCss("select option[value='" & SELECTED_INDEX & "']").Click
#day option[value='18']
VBA Code:

Option Explicit
Public Sub MakeSelection()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const URL = "https://www.facebook.com/"
    Const SELECTED_INDEX As Long = 18
    With d
        .Start "Chrome"
        .get URL
        'Selector was e.g. for day 1 "#day option[value='1']"
        .FindElementByCss("#day option[value='" & SELECTED_INDEX & "']").Click

        Stop '<= Delete me later
        .Quit
        Application.ScreenUpdating = True
    End With
End Sub