Python Selenium:从下拉列表中获取值

Python Selenium:从下拉列表中获取值,python,selenium,Python,Selenium,我正在使用Python中的Selenium打开一个网页,并试图从特定的下拉列表中获取值列表。假设下拉列表的HTML代码如下所示: <select class="mdc-select__input" name="nouveau-num" data-msisdn-loaded="0"> <option value="" selected="selected"></option>

我正在使用Python中的Selenium打开一个网页,并试图从特定的下拉列表中获取值列表。假设下拉列表的HTML代码如下所示:

<select class="mdc-select__input" name="nouveau-num" data-msisdn-loaded="0">                           <option value="" selected="selected"></option>
                     <option value="351 8320175">351 8320175</option>
<option value="351 8652736">351 8652736</option>
<option value="351 8783295">351 8783295</option>
<option value="351 8094085">351 8094085</option>
<option value="351 8861691">351 8861691</option>
<option value="351 8271705">351 8271705</option>
<option value="351 8970191">351 8970191</option>
<option value="351 8965848">351 8965848</option>
<option value="351 8353924">351 8353924</option>
<option value="351 8988158">351 8988158</option>
</select>

351 8320175
351 8652736
351 8783295
351 8094085
351 8861691
351 8271705
351 8970191
351 8965848
351 8353924
351 8988158
我想检索
标记之间的所有值。我尝试使用
浏览器.page\u source
返回网页的HTML源代码,然后使用正则表达式(类似于
),但结果为空。但是,由于某些原因,上面的HTML代码不在Selenium检索的HTML页面源代码中。有什么想法可以让我用不同的方式来处理这个问题吗/当前的方法有什么问题吗?

根据用正则表达式解析HTML的说法,这从来都不是一个好主意

你最好使用或

css选择器示例:

for tag in browser.find_elements_by_css_selector('select[name=nouveau-num] option'):
    value = tag.get_attribute('value')
    text = tag.text

您可以创建一个
Select
对象,并使用循环遍历大量选项

例如:

from selenium.webdriver.support.ui import Select
selector = Select(driver.find_element_by_name("nouveau-num"))
options = selector.options
for index in range(0, len(options)-1):
    print(options[index])
编辑: 我在您提供的链接上尝试了该代码,在加载下拉列表的值之前似乎有延迟。此外,我忘记了选项有一个元素列表,所以您需要指定.text。最重要的是,
By.NAME
似乎比
find\u element\u By\u NAME

以下是更正后的代码:

from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

dropdown = driver.find_element(By.NAME, "nouveau-num")

selector = Select(dropdown)

# Waiting for the values to load
element = WebDriverWait(driver, 
10).until(EC.element_to_be_selected(selector.options[0]))

options = selector.options
for index in range(1, len(options)-1):
    print(options[index].text)
使用此代码,我收到以下结果:

351 8631174
351 8586821
351 8014561
351 8831839
351 8957001
351 8673968
351 8612034
351 8585995
351 8438130

我试过了,但由于某种原因它不起作用。我正在使用的网站是,我首先单击“否”单选按钮,然后出现下拉菜单,我想从中提取值。我尝试了这个方法,但由于某种原因它不起作用。我正在使用的网站是,我首先单击“否”单选按钮,然后出现下拉菜单,我想从中提取值。如果您准备使用Ruby,那么这将是一行代码
put b.select_list(name:“nouveau num”).options.map{option | option.text}