使用selenium选择一个选项

时间:2017-11-20 03:36:11

标签: python selenium web-scraping

我有这个HTML代码:

<select data-val="true" data-val-number="Int32。" data-val-required="Int32" id="CategoryData" name="ParentId" onchange="sel3(this);">
<option value="0">-- category --</option>
<option selected="selected" value="845">a</option>
<option value="846">b</option>
<option value="847">c</option>
</select>

我想提取文字“a”,“b”,“c”。

我的代码:

select_box = driver.find_element_by_id("CategoryList3") 
options = [x for x in select_box.find_elements_by_tag_name("option")] 
for element in options:
    print (element.get_attribute("text"))

输出:

-- category --
a
b
c

这也会输出“ - category - ”,但我不想要这个。 我对硒很新,所以任何建议都表示赞赏!

3 个答案:

答案 0 :(得分:1)

如果只检查该值不是0?

from selenium.webdriver.support.ui import Select
select_box = Select(driver.find_element_by_id("CategoryList3"))
for option in select_box.options:
    if option.get_attribute('value') != '0':
        print(option.text)

答案 1 :(得分:0)

你可以使用切片删除列表中的第一个元素。

只需修改for循环中选项[1:]'的选项

select_box = driver.find_element_by_id("CategoryList3") 
options = [x for x in select_box.find_elements_by_tag_name("option")] 
for element in options[1:]:
    print (element.get_attribute("text"))

答案 2 :(得分:0)

提取文字&#34; a&#34;,&#34; b&#34;,&#34; c&#34;从给定的HTML开始,您可以使用以下代码块:

option_select = Select(driver.find_element_by_id('CategoryData'))
for opt in option_select.options:
    if ("-- category --" not in opt.get_attribute('innerHTML')):
        print(opt.get_attribute('innerHTML'))
  

我使用innerHTML而非使用value,因为您的问题是排除包含文字-- category --但不包含任何value的选项。