如何单击selenium和python的不可交互下拉列表并选择一个选项?

2024-05-16 11:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个id为“drp\u autogen0”的下拉列表。我想单击下拉列表,查看下拉选项。当我尝试用Python和Selenium单击它时,会出现以下错误:Selenium.common.exceptions.elementnotinteractiableexception:Message:element not interactiable 我已经附加了什么样的下拉列表看起来打印屏幕。我希望能够从列表中选择“上个月”,但我还没有做到这一点,因为下拉列表没有被点击。 https://snipboard.io/xDM1Un.jpg

下拉单击的代码如下:

html_list = driver.find_element_by_id("drp_autogen0")
html_list.click()

下拉按钮的web代码为:

<button type="button" class="comiseo-daterangepicker-triggerbutton ui-button ui-corner-all ui-widget comiseo-daterangepicker-bottom" id="drp_autogen0">22 Nov 2019<span class="ui-button-icon-space"> </span><span class="ui-button-icon ui-icon ui-icon-triangle-1-s"></span></button>

上个月的网页代码是:

<div id="ui-id-5" tabindex="-1" role="menuitem" class="ui-menu-item-wrapper">Last month</div>

Tags: 代码idui列表htmlseleniumbuttonelement
2条回答

如果您收到ElementNotInteractable错误消息,可以尝试使用Javascript解决此问题,单击:

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

# first, wait for the button to exist
html_list = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "drp_autogen0")))

# now click with Javascript
driver.execute_script("arguments[0].click();", html_list)

# now, click last month   wait for it to exist first!
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[text()='Last month']"))).click()

此代码示例调用所需元素的WebDriverWait,以确保在单击它们之前已将它们完全加载到页面上

然后,我们使用Javascript单击第一个button元素,以解决ElementNotInteractable异常。一旦下拉列表展开,我们将等待Last Month选项存在,然后再尝试单击它

即使看起来按钮/下拉选项立即出现在页面上,Selenium/Python也会在DOM中快速移动,因此driver可能试图单击一些尚不存在的东西。WebDriverWait语句只是在尝试单击之前确保元素存在于页面上

请检查DOM在运行时是否没有更改如果没有,则有两种方法可以解决此异常:

1.隐式等待

driver.manage().timeouts().implicitly Wait(10, TimeUnit.SECONDS);

2.WebDriver等待:

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("<Element path>")));

相关问题 更多 >