我需要用bs4获取一个select标签中被选中的option元素的value。我知道用selenium可以轻松做到 driver.find_element(By.ID, 'sex').get_attribute('value'), 但是selenium直接读取速度太慢,我的数据量庞大,所以不能用。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="content-type" content="text/html; charset=UTF-8">
<title>Hello World</title>
</head>
<body>
<div>
<label>Info:</label>
<select title="This is an info Component" id="sex" name="sex" class="ComboBox">
<option value="">--Select--</option>
<option value="M">Male</option>
<option value="F">Female</option>
<option value="O">Others</option>
</select>
</div>
</body>
</html>
我尝试了一下,无论选了哪个option,HTML都没变化,直接分析HTML元素,我分辨不出哪个option被选中了,但是在Edge控制台上,用 document.querySelector('#sex option:checked') 可以直接返回被选中的元素。于是我参照这个方法写了下面这段代码:
from bs4 import BeautifulSoup as bs
from selenium import webdriver
wb = webdriver.Edge()
wb.get('xxxxxxxx')
soup = bs(wb.page_source, 'html.parser')
elements = soup.select('#sex option:checked')
for element in elements:
print(element)
代码可以运行,但是结果为空,并没有找到相应的option元素。
我想问通过bs4,有什么办法可以返回select标签被选中option的值吗