NoSuchElementException:无法单击 div 元素
NoSuchElementException: could not click the div element
<td role="presentation" valign="top" class=" x-trigger-cell x-unselectable" style="width:28px;" id="ext-gen1147">
<div class="x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded" role="presentation" id="ext-gen1146">
</div></td>
我正在尝试单击此 div 元素但抛出 exception.My 代码是:
driver.find_element_by_xpath("//div[@id='ext-gen1146']").click()
driver.find_element_by_xpath("//*[@id='ext-gen1147']").click()
driver.find_element_by_xpath("//div[@class='x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded' and @id='ext-gen1146']")
selenium.common.exceptions.NoSuchElementException: Message: no such
element: Unable to locate element:
{"method":"xpath","selector":"//*[@id='ext-gen1147']"} (Session
info: chrome=80.0.3987.163)
尝试以下解决方案并检查您的元素不是动态的并且它不在 iframe 中,如果它在 iframe 中那么您必须切换到它然后单击您的元素。
wait.until(EC.element_to_be_clickable((By.ID, "ext-gen1147"))).click()
或
wait.until(EC.element_to_be_clickable((By.XPATH, "x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded"))).click()
注意:请将以下导入添加到您的解决方案
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
要切换到 iframe,您可以使用以下代码,请确保您只有一个 iframe,否则您可以在切换前使用 iframe 的 ID/Name 来识别正确的元素:
iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
driver.switch_to.frame(iframe)
我想也许你需要先等待可见性,也许这对你有帮助...例如:
WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<"ext-gen1146>));
单击动态元素 Induce WebDriverWait
() 和 element_to_be_clickable
() 并跟随 css selector
.
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.rp-icon-expanded[id^='ext-gen'][role='presentation']"))).click()
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以尝试使用操作 class 来点击预期的元素 -
Actions actions = new Actions(driver);
actions.click(element).build().perform();
如果这也不起作用,请尝试使用 JavascriptExecutor
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor..executeScript("arguments[0].click();", element);
<td role="presentation" valign="top" class=" x-trigger-cell x-unselectable" style="width:28px;" id="ext-gen1147">
<div class="x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded" role="presentation" id="ext-gen1146">
</div></td>
我正在尝试单击此 div 元素但抛出 exception.My 代码是:
driver.find_element_by_xpath("//div[@id='ext-gen1146']").click()
driver.find_element_by_xpath("//*[@id='ext-gen1147']").click()
driver.find_element_by_xpath("//div[@class='x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded' and @id='ext-gen1146']")
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='ext-gen1147']"} (Session info: chrome=80.0.3987.163)
尝试以下解决方案并检查您的元素不是动态的并且它不在 iframe 中,如果它在 iframe 中那么您必须切换到它然后单击您的元素。
wait.until(EC.element_to_be_clickable((By.ID, "ext-gen1147"))).click()
或
wait.until(EC.element_to_be_clickable((By.XPATH, "x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded"))).click()
注意:请将以下导入添加到您的解决方案
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
要切换到 iframe,您可以使用以下代码,请确保您只有一个 iframe,否则您可以在切换前使用 iframe 的 ID/Name 来识别正确的元素:
iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
driver.switch_to.frame(iframe)
我想也许你需要先等待可见性,也许这对你有帮助...例如:
WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<"ext-gen1146>));
单击动态元素 Induce WebDriverWait
() 和 element_to_be_clickable
() 并跟随 css selector
.
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.rp-icon-expanded[id^='ext-gen'][role='presentation']"))).click()
您需要导入以下库。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以尝试使用操作 class 来点击预期的元素 -
Actions actions = new Actions(driver);
actions.click(element).build().perform();
如果这也不起作用,请尝试使用 JavascriptExecutor
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor..executeScript("arguments[0].click();", element);