当前位置: 首页 > 知识库问答 >
问题:

如何从下拉列表中检索值列表

黄彬
2023-03-14
<div class="Fl(start) Pend(18px) option-contract-control drop-down-selector" data-reactid="4"> 
    <select class="Fz(s)" data-reactid="5"> 
        <option selected="" value="1576627200" data-reactid="6">December 18, 2019</option> 
        <option value="1576800000" data-reactid="7">December 20, 2019</option> 
        <option value="1577059200" data-reactid="8">December 23, 2019</option> 
        ...
    < / select > 
< / div >
def get_list_expiries(ticker):
    browser = webdriver.Chrome()
    options_url = "https://finance.yahoo.com/quote/" + str(ticker) + "/options"
    browser.get(options_url)
    html_source = browser.page_source
    soup = BeautifulSoup(html_source, 'html.parser')
    expiries_dt = []


    for exp in soup.find_all(class_="Fl(start) Pend(18px) option-contract-control drop-down-selector"):
        expiries_dt.append(exp.text)

    browser.quit()
    return expiries_dt
['December 18, 2019December 20, 2019December 23, 2019December 24, 2019December 27, 2019December 30, 2019...']

我明白我需要用硒,但我不知道怎么用。结果始终是单个字符串的列表。理想情况下,我希望返回两个列表:一个带有unix datestamp(option value=“1576627200”),另一个带有“normal”日期(即18/12/2019)的列表。

任何帮助都将不胜感激。

共有1个答案

糜昌胤
2023-03-14

要提取unix datestamp和到期日期,必须引入WebDriverWait,您可以使用以下定位器策略:

>

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import Select
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    
    driver.get('https://finance.yahoo.com/quote/SPY/options')
    select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.option-contract-control.drop-down-selector>select"))))
    print("Unix datestamp: ")
    print([option.get_attribute("value") for option in select.options])
    print("Dates: ")    
    print([option.get_attribute("innerHTML") for option in select.options])
    

    控制台输出:

    Unix datestamp:
    ['1576627200', '1576800000', '1577059200', '1577145600', '1577404800', '1577664000', '1577750400', '1578009600', '1578268800', '1578441600', '1578614400', '1578873600', '1579046400', '1579219200', '1579564800', '1579824000', '1580428800', '1582243200', '1584662400', '1585612800', '1587081600', '1589500800', '1592524800', '1593475200', '1594944000', '1600387200', '1601424000', '1602806400', '1605830400', '1606780800', '1608249600', '1610668800', '1616112000', '1623974400', '1631836800', '1639699200', '1642723200']
    Dates:
    ['December 18, 2019', 'December 20, 2019', 'December 23, 2019', 'December 24, 2019', 'December 27, 2019', 'December 30, 2019', 'December 31, 2019', 'January 3, 2020', 'January 6, 2020', 'January 8, 2020', 'January 10, 2020', 'January 13, 2020', 'January 15, 2020', 'January 17, 2020', 'January 21, 2020', 'January 24, 2020', 'January 31, 2020', 'February 21, 2020', 'March 20, 2020', 'March 31, 2020', 'April 17, 2020', 'May 15, 2020', 'June 19, 2020', 'June 30, 2020', 'July 17, 2020', 'September 18, 2020', 'September 30, 2020', 'October 16, 2020', 'November 20, 2020', 'December 1, 2020', 'December 18, 2020', 'January 15, 2021', 'March 19, 2021', 'June 18, 2021', 'September 17, 2021', 'December 17, 2021', 'January 21, 2022']
    

  •  类似资料:
    • 我正在使用Spring MVC Thymeleaf项目,我在将字段值传递给对象时遇到了问题。有和实体。在表单中,有一个下拉列表,由DB填充-仅限国家名称-没什么大不了的。我可以填充列表,但当我单击“提交”按钮时,有一些错误。下面的代码(仅限相关部分): 麦芽实体: 麦芽控制器: 麦芽形态: Malt展示模板: 我得到的结束错误: 链接到回购:https://github.com/fangirsan

    • 这是我当前的代码,其中我手动选择每个下拉列表并选择它们各自的值。:

    • 问题内容: 我想指定xpath到我的网页的元素。 我想获取“第一个值”,即选项内的文本。但我不知道如何获取文字。 问题答案: 可以处理在一个很好的和方便的方式。 这是通过可见文本选择选项的方法(java中的示例): 如果您仍然想要基于xpath的解决方案,则可以检查选项和: 或按索引获取: 或者您可以同时检查两者。

    • 下面给出了一段表示下拉列表的代码。我需要在此下拉列表中选择日期值,由<代码> 以下方法无效 1。)使用“按导入组织选择”选择此值。openqa。硒。支持用户界面。选择 控制台显示: 元素应该是“选择”,但应该是“选项” 2.)首先单击下拉列表以显示要选择的选项,然后单击该选项。 控制台显示: 调试元素缺少可访问的名称:id:类型,标记名:选择,类名:文本输入ng原始ng未触及ng有效ng范围 3.

    • 我正在使用谷歌工作表。我有两张名为App Catgeory和目录类别。 应用类别有两列:-1.类别名称2.是可选择的 在目录类别中,我有一个类别选择下拉列表,它是从应用程序类别表的类别名称列创建的。“类别名称”列中的所有值在下拉列表中可用。下拉列表由以下数据验证公式创建:- 但是,我想要这样的类别名称在下拉列表中有是可选择的列值是在应用类别。如果是可选择的列值为否,则不需要在下拉列表中显示此类类别

    • 问题内容: 下面给出的是一段代码,表示下拉列表。我需要在此下拉列表中选择 日期 值,表示为 遵循方法无效。 1.)使用“ 选择” 通过导入 org.openqa.selenium.support.ui.Select* 选择此值 * 控制台显示: 元素应该是“选择”但是“选项” 2.)首先单击下拉菜单以显示要选择的选项,然后单击该选项。 控制台显示: DEBUG元素缺少可访问的名称:id:类型,ta