首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以用selenium+python获得多选择选项吗?

我可以用selenium+python获得多选择选项吗?
EN

Stack Overflow用户
提问于 2019-12-12 08:32:51
回答 3查看 1.4K关注 0票数 0

经过测试的HTML:

代码语言:javascript
运行
复制
<select>
    <option value="html">html</option>
    <option value="css">css</option>
    <option value="JavaScript">JavaScript</option>
    <option value="php">php</option>
</select>
  1. 在类isMultiple()中没有像selenium.webdriver.support.select.Select(webelement)这样的方法,也没有select_all()方法
  2. 当我一个一个地选择这四个选项时
代码语言:javascript
运行
复制
Select(lang).select_by_visible_text("html")
Select(lang).select_by_visible_text("css")
Select(lang).select_by_visible_text("JavaScript")
Select(lang).select_by_visible_text("php")

然后尝试获取所有选定的选项。

代码语言:javascript
运行
复制
Select(lang).all_selected_options

我只能得到最后一个选项'php',这意味着当我选择一个选项时,另一个选项被自动取消选择。all_selected_options的含义是什么,options是很有用的。我不能取消选择任何选项,因为只有一个选项被选中,报告了一个错误:

代码语言:javascript
运行
复制
NotImplementedError: You may only deselect options of a multi-select
EN

回答 3

Stack Overflow用户

发布于 2019-12-12 09:22:47

如果要在python中使用selenium选择多个选项,可以始终使用ActionChains链接一系列操作,在本例中需要以下操作:

  1. CTRL
  2. Click关于期权
  3. 释放CTRL密钥

这里是在python中使用ActionChains的一个很好的例子

列出要在python中选择的选项列表,循环列表并使用xpath选择包含text的选项,然后使用ActionChains使用上面定义的一系列操作来选择该选项。

代码语言:javascript
运行
复制
# Text of options needed to select
options = ['html','css','php']

# Add path to your chrome drive
browser = webdriver.Chrome(executable_path="EXECUTABLE_PATH_HERE")

# Add url of website
browser.get("WEBSITE_URL_HERE")

for option in options:
  # Find option that contains text equal to option
  to_select = browser.find_element_by_xpath("//select/option[text()='"+option+"']")

  # Use ActionChains
  ActionChains(browser).key_down(Keys.CONTROL).click(to_select).key_up(Keys.CONTROL).perform()
  • 在本例中,ActionChains()获取驱动程序的引用,即browser
  • key_down()按下传递给它的CONTROL键。
  • click()单击使用xpath选择的已传递选项。
  • key_up()发布CONTROL密钥

我希望这会对你有很大帮助。

票数 1
EN

Stack Overflow用户

发布于 2019-12-12 09:17:56

此下拉列表不支持多个选择,该下拉列表将具有multiple属性

代码语言:javascript
运行
复制
<select multiple="">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

没有is_multiple()函数,但是有一个变量is_multiple。它是在Select __init__中通过检查multiple属性创建的

代码语言:javascript
运行
复制
def __init__(self, webelement):
    self._el = webelement
    multi = self._el.get_attribute("multiple")
    self.is_multiple = multi and multi != "false"

您可以使用Select实例访问它。

代码语言:javascript
运行
复制
Select(element).is_multiple

要获取所有下拉选项,不管它们是否被选中,请使用option属性,这将以WebElement列表的形式返回所有选项

代码语言:javascript
运行
复制
options = Select(element).options
for option in options:
    print option.text # html, css, ...
票数 0
EN

Stack Overflow用户

发布于 2019-12-12 10:28:55

根据您共享的HTML:

代码语言:javascript
运行
复制
<select>
    <option value="html">html</option>
    <option value="css">css</option>
    <option value="JavaScript">JavaScript</option>
    <option value="php">php</option>
</select>

multiple.标记没有属性<select>所以它可能不是多选择下拉菜单

要从<option>标记中提取文本,可以使用以下任一定位器策略

  • 使用tag_name: Select(driver.find_element_by_tag_name('select')) select_technology =select_technology.options中的选项: print(option.text)
  • 使用xpath: Select(driver.find_element_by_xpath(//select)) select_technology =select_technology.options中的选项: print(option.text)
  • 注意事项:您必须添加以下导入: 从selenium导入from驱动程序从selenium.webdriver.support.select导入选择
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59300480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档