我在Python中使用Selenium打开一个网页,并试图从一个特定的下拉列表中获取值列表。
<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页面源代码中。有什么想法我可以用不同的方法处理这个问题吗/现时的做法有甚么问题?
4条答案
按热度按时间ippsafx71#
您可以创建一个
Select
对象,并使用循环遍历选项的数量。例如:
编辑:
我在你提供的链接上尝试了代码,似乎有一个延迟,直到下拉列表的值被加载。另外,我忘记了选项有一个元素列表,所以你需要指定. text。最重要的是,
By.NAME
似乎比find_element_by_name
更好地工作下面是更正后的代码:
使用这段代码,我收到了以下结果:
snvhrwxg2#
根据这个聪明的回答,用Regex解析HTML从来都不是一个好主意。
您最好使用
find_elements_by_css_selector
或find_elements_by_xpath
。css选择器示例:
lsmepo6l3#
为此我这样做:
1.获取xpath.
(//label/div/div[1]/div[1]/div[1])
1.将
"/*"
放在(//label/div/div[1]/div[1]/div[1]/*)
的末尾1.使用driver.find_elements找到它(这很重要,如果省略结尾的“s”,则会失败)
(lista = driver.find_elements(By.XPATH, '//label/div/div[1]/div[1]/div[1]/*'))
1.然后,您将得到一个web元素列表(不是字符串),我称之为“lista”
1.使用for循环并将值放入列表中。
列表项=列表()
对于列表项中的i:列表项目. append(i.文本)
仅此而已。
kpbwa7wx4#