我正在尝试使用Selenium在下拉菜单中选择一个选项,但我无法弄清楚如何处理此Timeout异常
这是页面的html:
<select name="ctl00$ContentPlaceHolder1$ddUnidade" onchange="javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddUnidade\',\'\')', 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消息。有人知道如何解决吗?
尝试以下解决方案:
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')