【问题标题】:Unable to select a value from dropdown in webpage using selenium VBA无法使用 selenium VBA 从网页的下拉列表中选择一个值
【发布时间】:2019-02-06 17:37:24
【问题描述】:

我正在尝试使用带有 VBA 绑定的 Seleinum 从网页的下拉列表中选择一个值,但我无法做到。

这是我试过的代码bot.FindElementById("holder-samples-date-type-inputEl").SendKeys "XX"

我没有收到任何错误代码运行它单击下拉按钮并显示列表但未选择任何值并且下拉列表不会更改。

我有相同的项目,使用 VBA 和 IE(DOM 元素),这段代码在 Internet Explorer IE.document.getElementById("holder-samples-date-type-inputEl").Value = "XX" 中运行良好

这个下拉列表的有趣部分是单击下拉图标后我无法检查列表(例如右键单击列表),如果我单击网页中的其他任何位置或更改窗口下拉列表得到关闭(就像它缩回一样)注意:这不是鼠标悬停下拉。此外,当列表打开时,似乎添加了额外的代码(我已经粘贴了代码的 sn-p)

以下是网页中的 HTML。

<div id="holder-samples-date-type-triggerWrap" data-ref="triggerWrap" class="x-form-trigger-wrap x-form-trigger-wrap-default x-form-trigger-wrap-invalid">
<div id="holder-samples-date-type-inputWrap" data-ref="inputWrap" class="x-form-text-wrap x-form-text-wrap-default x-form-text-wrap-invalid"><input id="holder-samples-date-type-inputEl" data-ref="inputEl" type="text" role="combobox" aria-label="Chargebacks: Date Type" aria-readonly="false" aria-required="true" aria-haspopup="true" aria-expanded="false" aria-autocomplete="list" size="1" name="P_samples_Date_Type" readonly="readonly" class="x-form-field x-form-required-field x-form-text x-form-text-default  x-form-invalid-field x-form-invalid-field-default" autocomplete="off" aria-labelledby="holder-samples-date-type-labelEl" aria-owns="boundlist-1206" componentid="holder-samples-date-type" data-errorqtip="<ul class=&quot;x-list-plain&quot;><div>Date Type</div><li>This field is required</li></ul>" aria-invalid="true"></div>
<div id="holder-samples-date-type-trigger-picker"
aria-label="Trigger" class="x-form-trigger x-form-trigger-default x-form-arrow-trigger x-form-arrow-trigger-default "><img class="combo-trigger-placeholder" src="https://www.sample.net/clr/images/16x16_transparent.png" title="combobox trigger" alt="combobox trigger"></div>
</div>

下面是图片

由于我无法右键单击下拉选项。我在开发者窗口中做了一个“查找”选项,下面是下拉项的网页代码,它位于 iframe 内

<div id="boundlist-1206-listWrap" data-ref="listWrap" role="presentation" class="x-boundlist-list-ct x-unselectable" style="overflow: auto; height: auto;">
  <ul id="boundlist-1206-listEl" data-ref="listEl" class="x-list-plain">
    <div data-qtip="" class="x-boundlist-item x-boundlist-item-over" tabindex="-1" data-recordindex="0" data-recordid="31" data-boundview="boundlist-1206" id="ext-932" role="option" aria-selected="false">Received Date</div>
    <div data-qtip="" class="x-boundlist-item" tabindex="-1" data-recordindex="1" data-recordid="32" data-boundview="boundlist-1206" id="ext-933" role="option" aria-selected="false">Status Date</div>
    <div data-qtip="" class="x-boundlist-item" tabindex="-1" data-recordindex="2" data-recordid="33" data-boundview="boundlist-1206" id="ext-934" role="option" aria-selected="false">Due Date</div>
    <div data-qtip="" class="x-boundlist-item" tabindex="-1" data-recordindex="3" data-recordid="34" data-boundview="boundlist-1206" id="ext-935" role="option" aria-selected="false">Disposition Date</div>
  </ul>
</div>

【问题讨论】:

  • 选项列表的 html 在哪里?你不能像上面提到的那样复制吗?
  • 刚才我遇到了罢工,所以我在开发人员窗口中选择了“查找”选项并将代码粘贴到我的问题中。这不是一个公共站点,所以很抱歉它不能共享。
  • 你需要先切换到 iframe

标签: excel vba selenium web-scraping drop-down-menu


【解决方案1】:

可能有帮助的几点:

1) 如果在 iframe 中,您需要先切换到 iframe

bot.SwitchToFrame(identifier)

标识符可以是 iframe name/id 等选择的元素。

2) 您可以尝试在使用 SendKeys 之前单击并按住输入文本框

bot.FindElementById("x").ClickAndHold
'sendkeys line here

3) 您可以尝试使用 javascript 设置值

bot.ExecuteScript "document.getElementById('x').value = 'xx';"

【讨论】:

  • 这段代码就像魔法 bot.ExecuteScript "document.getElementById('x').value = 'xx';"但是你知道我在哪里可以了解更多关于这方面的信息,因为我不知道 Javascript。让我感到惊讶的是 Javascript 可以在 VBA 中使用。
  • 从自动化测试网站功能的角度来看,这不是最佳实践,但我通常更关心以一致的方式完成工作。
  • 一点也不。纯粹主义者会希望通过自动按下按钮等来完成所有事情......我通过运行 javascript 来实现最终目标。但是,如果您正在测试网站功能,您会希望确保可以通过点击等自动化从下拉列表中进行选择......
  • 很高兴听到这个消息,您是否有任何链接可以了解这方面的内容,还是我首先学习 java 的主题完全不同?
  • 这是 javascript 而不是 java。并且知道足够的 javascript 来编写像上面这样的语句,我认为对于网络抓取来说是一个真正的好处。我认为它也有助于调试页面,了解网页在做什么。上面的行与您在 vba 中所做的基本相同,因此除了知道如何以 javascript 方式表达它并将其包装在 .execute 语句中之外,没有真正的学习曲线。对于简单的案例来说,学习一些初学者的 javascript 课程并了解你的 vba 抓取应该足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2019-02-13
  • 2019-01-06
  • 2021-02-11
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多