如何从 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']