【问题标题】:Select a drop down menu option using Selenium in Python在 Python 中使用 Selenium 选择下拉菜单选项
【发布时间】:2020-04-29 18:15:19
【问题描述】:

我正在尝试使用 Selenium 在下拉菜单中选择一个选项,但我不知道如何处理此超时异常

这是页面的html:

<select name="ctl00$ContentPlaceHolder1$ddUnidade" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$ContentPlaceHolder1$ddUnidade\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_ContentPlaceHolder1_ddUnidade" class="form-control" style="width:100%;">
        <option selected="selected" value="">-- SELECIONE --</option>
        <option value="1">MATRIZ</option>
        <option value="2">FILIAL</option>

    </select>

首先我尝试了这段代码:

select = Select(browser.find_element_by_id('ctl00_ContentPlaceHolder1_ddUnidade'))
select.select_by_visible_text('MATRIZ')

然后我遇到了这个错误: ElementNotInteractableException:消息:元素无法滚动到视图中

我搜索并找到了 WebDriverWait 解决方案。所以,我尝试了这段代码:

select = Select(browser.find_element_by_id('ctl00_ContentPlaceHolder1_ddUnidade'))
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='ctl00_ContentPlaceHolder1_ddUnidade']//options[contains(.,'MATRIZ')]")))
select.select_by_visible_text('MATRIZ')

然后我有这个: 超时异常:消息:

我再次用谷歌搜索,EC.presence_of_element_located 有另一个解决方案,但它也不起作用。我有相同的 TimeouException 消息。 有人知道怎么解决吗?

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver drop-down-menu timeoutexception


    【解决方案1】:

    尝试以下解决方案:

    element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
    actionChains = ActionChains(driver)
    actionChains.move_to_element(element).perform()
    select = Select(element)
    select.select_by_visible_text('MATRIZ')
    

    注意:请在您的解决方案中添加以下导入

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.action_chains import ActionChains
    

    或

    element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
    driver.execute_script("arguments[0].scrollIntoView()", element)
    select = Select(element)
    select.select_by_visible_text('MATRIZ')
    

    更新的解决方案:

    element= WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.ID, "ctl00_ContentPlaceHolder1_ddUnidade")))
    actionChains = ActionChains(driver)
    actionChains.move_to_element(element).perform()
    select = Select(element)
    WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='ctl00_ContentPlaceHolder1_ddUnidade']//options[contains(.,'MATRIZ')]")))
    select.select_by_visible_text('MATRIZ')
    

    【讨论】:

    • 谢谢迪帕克!我尝试了这两种解决方案,并收到以下消息: ElementNotInteractableException: Message: Element
    • 迪帕克,再次感谢!!但是这次我有 TimeoutException: Message: on this line: WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='ctl00_ContentPlaceHolder1_ddUnidade']//options[contains( .,'MATRIZ')]")))
    • 分享你的网址,我会从头检查
    猜你喜欢
    • 2018-02-17
    • 2016-07-28
    • 2023-03-25
    • 2022-11-11
    • 2019-02-04
    • 2017-03-23
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多