使用Python中的Selenium选择下拉菜单选项

问题描述 投票:0回答:1

我正在尝试使用Selenium在下拉菜单中选择一个选项,但我无法弄清楚如何处理此Timeout异常

这是页面的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:消息:无法将元素滚动到视图中

我用Google搜索并找到了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')

然后我有了这个:TimeoutException:消息:

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

python-3.x selenium selenium-webdriver drop-down-menu timeoutexception
1个回答
0
投票

尝试以下解决方案:

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')
© www.soinside.com 2019 - 2024. All rights reserved.