我制作了一个小代码,其目的是将我登录到一个网站,然后在下拉菜单中选择一个选项。我无法弄清楚如何做到这一点。
我正在使用selenium和python,除了关于下拉菜单的这段代码之外,一切都很好:
# 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>
使用此代码不会显示错误,只是它没有选择任何内容。
我也尝试过选择功能:
find_element_by_css_selector("select#rating > option[value='2']").click()
但这引发了这个错误:
NameError: name 'find_element_by_css_selector' is not defined
答案 0 :(得分:2)
对于select标签,您需要使用以下方法选择选项
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")
如果有任何问题,请告诉我
答案 1 :(得分: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!!!
我的输出。
答案 2 :(得分:0)
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