无法找到的元素:同时通过硒和Python点击一个按钮

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

我想对Python的使用Selenium点击一个按钮(事件),并且按钮的代码为:

   <input id="workbenchLst:j_id_id509" name="workbenchLst:j_id_id509" onclick="A4J.AJAX.Submit('workbenchLst',event,{'similarityGroupingId':'workbenchLst:j_id_id509','parameters':{'ajaxSingle':'workbenchLst:j_id_id509','workbenchLst:j_id_id509':'workbenchLst:j_id_id509'} ,'containerId':'j_id_id1'} );return false;" value="Add" type="button" autocomplete="off">

我的代码:

driver.find_element_by_id("workbenchLst:j_id_id509").click()#add

它不工作,错误:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="workbenchLst:j_id_id509"]
python selenium xpath css-selectors webdriverwait
3个回答
0
投票

检查你的页面中的iframe /框架的第一个,如果有一个帧/ iframe中,那么你需要先切换框架如下图所示:

driver.switch_to_frame(driver.find_element_by_id("iframeid"));

您可以尝试一下用下面的XPath的元素:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
element.click();

或者你可以尝试使用JavaScript的执行者象下面这样:

element = driver.find_element_by_xpath("//input[contains(@id, 'workbenchLst') and @value='Add']");
driver.execute_script("arguments[0].click();", element);

仍然没有工作然后尝试给予一定的延迟,从时间进口睡眠象下面这样:

from time import sleep
driver.switch_to_frame(driver.find_element_by_id("iframeid"));
sleep(5);
element = driver.find_element_by_xpath("(//input[contains(@id, 'workbenchLst') and @value='Add'])[2]");
element.click();

我希望它的工作原理...


0
投票

所需的元件是一个动态元素,以便以找到具有诱导WebDriverWait为元素是可点击的元件并且可以使用下列的解决方案:

  • 使用CSS_SELECTORWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[id^='workbenchLst:'][name^='workbenchLst:'][value='Add']"))).click()
  • 使用XPATHWebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[starts-with(@id,'workbenchLst:') and starts-with(@name,'workbenchLst:')][@value='Add']"))).click()
  • 注意:您要添加以下的进口: from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

-1
投票

尝试这个 :

element = driver.find_element_by_id('workbenchLst:j_id_id509')
element.click()

要么 :

element = driver.find_element(by=By.ID, value="workbenchLst:j_id_id509")
© www.soinside.com 2019 - 2024. All rights reserved.