如何从 select 元素的选项中提取文本
How EXTRACT THE TEXT from an option of a select element
我把“提取文本”放在了大写字母中,因为我还没有看到任何有效的答案。我需要提取具有两个嵌套 optgroup 的下拉列表中的每个可用选项,我不想只是 select 值。 html如下:
<select data-tracking-id="car_reviews_index_mmy_model_select" data-no-refresh="false" id="sel-3155799655901836" name="select-model" class="js-models-select mmy-select w-100 btn btn-sm btn-secondary text-left">
<option selected="" class="" disabled="" value="">Select Model</option>
<optgroup label="Popular Models" class="">
<option class="" value="ILX">ILX</option>
<option class="" value="MDX">MDX</option>
<option class="" value="NSX">NSX</option>
<option class="" value="RDX">RDX</option>
<option class="" value="RLX">RLX</option>
<option class="" value="TLX">TLX</option>
</optgroup><optgroup label="Other Models" class="">
<option class="" value="CL">CL</option>
<option class="" value="ILX Hybrid">ILX Hybrid</option>
<option class="" value="Integra">Integra</option>
<option class="" value="Legend">Legend</option>
<option class="" value="RL">RL</option>
<option class="" value="RSX">RSX</option>
<option class="" value="SLX">SLX</option>
<option class="" value="TL">TL</option>
<option class="" value="TSX">TSX</option>
<option class="" value="TSX Sport Wagon">TSX Sport Wagon</option>
<option class="" value="Vigor">Vigor</option>
<option class="" value="ZDX">ZDX</option>
</optgroup></select>
我使用以下代码 select 第一个下拉列表中的所有值,它不是嵌套的,select 第二个下拉列表的值,但我可以' 似乎提取文本:
driver = webdriver.Chrome('WebScraping/chromedriver')
url = 'https://www.edmunds.com/car-reviews/'
driver.get(url)
cars = []
options = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[name="select-make"] option')))
for val in tqdm(range(1,69,1)):
options[val].click
cars.append(options[val].text)
select = Select(driver.find_element_by_name('select-make'))
select.select_by_value(cars[0].lower())
select_element = Select(driver.find_element_by_name('select-model'))
all_available_options = select_element.select_by_index(1)
有人知道如何获取第二个下拉列表的文本值吗?
首先 select 您需要使用 cars[1]
代替 cars[0]
的第一个下拉项目,因为它已经 select 编辑和禁用。
要从第二个下拉菜单中获取文本,您需要先 select 第一个下拉菜单项。
所以你的代码会像
select = Select(driver.find_element(By.NAME,'select-make'))
select.select_by_value(cars[1].lower())
select_element = Select(driver.find_element(By.NAME,'select-model'))
all_available_options =[option.text for option in select_element.options]
print(all_available_options)
输出:
['Select Model', 'ILX', 'MDX', 'NSX', 'RDX', 'RLX', 'TLX', 'CL', 'ILX Hybrid', 'Integra', 'Legend', 'RL', 'RSX', 'SLX', 'TL', 'TSX', 'TSX Sport Wagon', 'Vigor', 'ZDX']
我把“提取文本”放在了大写字母中,因为我还没有看到任何有效的答案。我需要提取具有两个嵌套 optgroup 的下拉列表中的每个可用选项,我不想只是 select 值。 html如下:
<select data-tracking-id="car_reviews_index_mmy_model_select" data-no-refresh="false" id="sel-3155799655901836" name="select-model" class="js-models-select mmy-select w-100 btn btn-sm btn-secondary text-left">
<option selected="" class="" disabled="" value="">Select Model</option>
<optgroup label="Popular Models" class="">
<option class="" value="ILX">ILX</option>
<option class="" value="MDX">MDX</option>
<option class="" value="NSX">NSX</option>
<option class="" value="RDX">RDX</option>
<option class="" value="RLX">RLX</option>
<option class="" value="TLX">TLX</option>
</optgroup><optgroup label="Other Models" class="">
<option class="" value="CL">CL</option>
<option class="" value="ILX Hybrid">ILX Hybrid</option>
<option class="" value="Integra">Integra</option>
<option class="" value="Legend">Legend</option>
<option class="" value="RL">RL</option>
<option class="" value="RSX">RSX</option>
<option class="" value="SLX">SLX</option>
<option class="" value="TL">TL</option>
<option class="" value="TSX">TSX</option>
<option class="" value="TSX Sport Wagon">TSX Sport Wagon</option>
<option class="" value="Vigor">Vigor</option>
<option class="" value="ZDX">ZDX</option>
</optgroup></select>
我使用以下代码 select 第一个下拉列表中的所有值,它不是嵌套的,select 第二个下拉列表的值,但我可以' 似乎提取文本:
driver = webdriver.Chrome('WebScraping/chromedriver')
url = 'https://www.edmunds.com/car-reviews/'
driver.get(url)
cars = []
options = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[name="select-make"] option')))
for val in tqdm(range(1,69,1)):
options[val].click
cars.append(options[val].text)
select = Select(driver.find_element_by_name('select-make'))
select.select_by_value(cars[0].lower())
select_element = Select(driver.find_element_by_name('select-model'))
all_available_options = select_element.select_by_index(1)
有人知道如何获取第二个下拉列表的文本值吗?
首先 select 您需要使用 cars[1]
代替 cars[0]
的第一个下拉项目,因为它已经 select 编辑和禁用。
要从第二个下拉菜单中获取文本,您需要先 select 第一个下拉菜单项。
所以你的代码会像
select = Select(driver.find_element(By.NAME,'select-make'))
select.select_by_value(cars[1].lower())
select_element = Select(driver.find_element(By.NAME,'select-model'))
all_available_options =[option.text for option in select_element.options]
print(all_available_options)
输出:
['Select Model', 'ILX', 'MDX', 'NSX', 'RDX', 'RLX', 'TLX', 'CL', 'ILX Hybrid', 'Integra', 'Legend', 'RL', 'RSX', 'SLX', 'TL', 'TSX', 'TSX Sport Wagon', 'Vigor', 'ZDX']