Причина, по которой вы не можете извлечь этот выпадающий список, заключается в том, что этот список генерируется динамически, и самый простой способ узнать это - сохранить содержимое html в файл и вручную просмотреть его в текстовый редактор.
Однако вы МОЖЕТЕ проанализировать эти даты из исходного кода скрипта, который находится в том же файле html, используя некрасивый способ регулярных выражений. Например, это похоже на работу:
import requests, re
from datetime import *
content = requests.get('https://ca.finance.yahoo.com/quote/AAPL/options').content.decode()
match = re.search(r'"OptionContractsStore".*?"expirationDates".*?\[(.*?)\]', content)
dates = [datetime.fromtimestamp(int(x), tz=timezone.utc) for x in match.group(1).split(',')]
for d in dates:
print(d.strftime('%Y-%m-%d'))
Должно быть очевидно, что анализ такого неприятного способа не защищен от ошибок и, скорее всего, сломается раньше, чем позже. Но то же самое можно сказать и о любом виде уничтожения веб-страниц.