【问题标题】:Selenium Python dropdown find and select doesn't workSelenium Python 下拉查找和选择不起作用
【发布时间】:2017-05-30 12:48:58
【问题描述】:

我制作了一个小代码,其目的是让我登录一个网站,并在下拉菜单中选择一个选项等。而且我无法弄清楚如何做到这一点。

我在 python 中使用 selenium,除了关于下拉菜单的这段代码之外,一切都很好:

# dropdown  
element = browser.find_element_by_id("rating")
for option in element.find_elements_by_tag_name("option"):
    if option.text == "It's OK":
        option.click()
        break

这是关于下拉菜单的页面的html代码:

<select name="rating" id="rating" size="1" style="margin-bottom:6px;">
    <option value=""></option>
    <option value="5">I Love it!</option>
    <option value="4">I Like it</option>
    <option value="3">It's OK</option>
    <option value="2">I Don't like it</option>
    <option value="1">I Hate it!</option>
</select>

使用此代码不会显示任何错误,只是没有选择任何内容。

我也尝试过 Select 函数:

find_element_by_css_selector("select#rating > option[value='2']").click()

但是这会抛出这个错误:

NameError: name 'find_element_by_css_selector' is not defined

【问题讨论】:

  • 第二种方法有什么错误?
  • 如果有帮助请查看此帖子stackoverflow.com/questions/22524621/…
  • @BernardParah 我已经看过了,但不幸的是,它不能解决我的问题。
  • @HenryM 错误是:“NameError: name 'find_element_by_css_selector' is not defined”
  • 有趣的是我使用了你的确切代码并且它有效

标签: python selenium


【解决方案1】:

对于选择标签,您需要使用以下方法来选择一个选项

from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_id('rating'))
select.select_by_index("3")
// or
select.select_by_visible_text("It's OK")
// or
select.select_by_value("3")

如果有任何问题请告诉我

【讨论】:

  • 感谢您的回复,很遗憾这并不能解决问题。实际上没有错误,但是在浏览器中没有选择任何内容(没有选择“It's OK”)。
【解决方案2】:

我设置了一个快速页面来测试它并且它有效!!!

这是更新后的代码。

 #!/usr/bin/env python3
 from selenium import webdriver

 browser = webdriver.Firefox()

 site = browser.get('http://localhost:8000/')

 element = browser.find_element_by_id("rating")

 for option in element.find_elements_by_tag_name("option"):
     print(option.text)
     if option.text == "It's OK":
        option.click()
        print('fount it!!!')
        break




I Love it!
I Like it
It's OK
fount it!!!

我的输出。

【讨论】:

  • 我使用的是 Python 2.7,实际上我不知道为什么这不起作用。现在我将尝试您提供的第二个链接。我唯一能想到的是浏览器的驱动程序是旧的(或者什么,有可能吗?!)。
  • 然后使用python 3,我没有问题
  • 要不要先卸载2.7版本?我唯一担心的是我对 2.7 的所有依赖项,这些依赖项在 3+ 上不起作用
  • 视情况而定,我不知道项目有多大,依赖项对项目有多重要,你可以在同一台机器上使用两个版本的python。您只需要在顶部指定用于特定脚本的版本。 #!/usr/bin/env python3 ,一旦我关闭它,我的项目将默认为 python 2。
  • 好吧,我的错。我在 linux 上,发现我已经有了 Python3。所以我会在开头添加这个字符串并相应地更改代码。将更新输出! @Bernard Parah
【解决方案3】:
 Please try the following and let me know. This will click the parent element  first, so that, list of values will be displayed on the page and then click on the options.
element= browser.find_element_by_id("rating")
element.click()
for option in element.find_elements_by_tag_name("option"):
    if option.text == "It's OK":
        option.click()
        break

【讨论】:

  • 与 mi 初始问题相同:没有提供错误,但似乎绕过了这些行,因为在浏览器中没有选择任何内容。
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 2020-07-10
  • 2021-04-28
  • 2023-03-25
  • 1970-01-01
  • 2022-11-11
  • 2017-02-23
相关资源
最近更新 更多