python - Python Selenium:从下拉列表中获取值
问题描述
我在 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>
我想检索<option>
标签之间的所有值。我试图做一个browser.page_source
返回网页的 HTML 源代码,然后做一个正则表达式(类似于<option value="[0-9 ]*">
),但结果是空的。然而,出于某种原因,上面的 HTML 代码不在 Selenium 检索到的 HTML 页面源代码中。任何想法我可以如何以不同的方式处理这个/当前方法有什么问题?
解决方案
您可以创建一个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_element_by_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
推荐阅读
- r - 如何根据 R 中另一列中的特定文本创建二进制列?
- java - Netbeans 8.2 无法验证 Git 凭证?
- c++ - cin.rdstate() 返回什么?
- php - 在 STR 上将 STR 的其余部分替换为 0
- python - 空间 | 是否可以删除短语匹配器中对长度的硬编码限制?
- c++ - 为什么我不能发送 PostMessage?
- css - 如何创建多色边框?
- python-2.7 - 如何检查python 2中的字典值列表?
- php - 显示 verify_sign=undefined 的 PayPal IPN
- android - Android Glide 不会从带有 `;` 的 url 加载图像