Python/Selenium-访问非交互式元素

Python/Selenium-访问非交互式元素,python,selenium,Python,Selenium,我需要的是: 从下拉列表中选择一个选项 只有按钮元素可见选择元素不可见 这是html代码: <td data-bind="css: { 'cell-error': applicantNames.hasError }, attr: { title: applicantNames.message }" title=""> <select data-bind="options: $parent.applicants, mult

我需要的是:

从下拉列表中选择一个选项 只有按钮元素可见选择元素不可见 这是html代码:

<td data-bind="css: { 'cell-error': applicantNames.hasError }, attr: { title: applicantNames.message }" title="">
    <select data-bind="options: $parent.applicants, multivalue: applicantNames" multiple="multiple" style="display: none;">
        <option value="ABC">ABC</option>
        <option value="XYZ">XYZ</option>
    </select>
    <button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all" aria-haspopup="true" style="width: 236px;"><span class="ui-icon ui-icon-triangle-2-n-s"></span><span>Please select...</span></button>
</td>
这就是它的样子:

问题是,我想使用Selenium选择其中一个选项,但因为select元素不可交互/不可见。。。不知道该怎么办

如果从下拉列表中选择一个选项,按钮元素将如下更新

<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all ui-state-active" aria-haspopup="true" style="width: 236px;">
    <span class="ui-icon ui-icon-triangle-2-n-s"></span><span>ABC, XYZ</span>
</button>
driver.find_element_by_xpath("//span[contains(text(), 'Please select')]").click()
即使我手动更新按钮部分,它仍然不会直观地更新元素。。。。。所以我有点执着于找到一种方法,如何通过使用硒元素与这些元素交互

另外,我正在寻找任何无头方法,例如通过Selenium和e.t.c执行Selenium/JavaScript。

请看问题是,这不是使用Select-option标记构建的,因此不能直接使用Selenium支持包中的Select类

相反,您可以尝试使用Selenium单击该菜单 你的情况是这样的

<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all ui-state-active" aria-haspopup="true" style="width: 236px;">
    <span class="ui-icon ui-icon-triangle-2-n-s"></span><span>ABC, XYZ</span>
</button>
driver.find_element_by_xpath("//span[contains(text(), 'Please select')]").click()
然后使用find_elements将所有可见选项存储在web元素列表中,然后迭代该列表:

for option in list_of_options:
    if option.text == "your desired option"
       option.click()

我刚刚发现问题,这个选项列表实际上出现在框架内。。。。。一种奇怪的编码方式,但无论如何。。。。。所以我找到了一种方法进入这个页面,获取可见元素并找到正确的选项。请注意,我不确定是否需要关闭/删除此问题。您可能需要切换到iframe。您的回答很好:但关键是实际选项列表位于不同的位置,而不是您认为应该位于的位置be@OksanaOk:通常,在iframe的情况下,我们不会得到任何TouchElementException。因为它没有被提及,我不认为它可能在一个iframe中。祝你好运!