以下是元素:
<label title="Place Order" style="cursor: pointer" onclick="AjaxPageLoad(fno, 'FNOOrder');">Place Order<div></div></label>
我正在尝试单击此按钮,但是需要使用@onclick
作为主要区别。我读了其他类似的问题,但似乎无法解决这个问题:
driver.find_element_by_xpath("//a[contains(@onclick,'fno')]").click()
driver.find_element_by_xpath("//a[contains(@onclick,'FNOOrder')]").click()
我得到的错误:
ElementNotInteractableException: Message: Element <a id="lnkFNO" class="active" href="javascript:void(0)"> could not be scrolled into view
但是该元素是可见的,因此我认为xpath
必须是错误的。
答案 0 :(得分:1)
根据 HTML ,您已经共享了使用onclick
事件单击所需元素的步骤,必须引发 WebDriverWait ,您可以使用以下解决方案:
xpath 使用 onclick :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
xpath 使用 onclick 和 title :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
xpath 使用 onclick ,标题和 innerHTML :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"][contains(.,'Place Order')]"))).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 :(得分:0)
尝试使用css选择器,如果您熟悉Web开发,应该会更容易。
driver.find_element_by_css_selector("label[onclick*=fno]").click()
以上代码将选择带有onclick
参数的标签包含'fno'字符串。在这里您可以找到所有选择器:https://www.w3schools.com/cssref/css_selectors.asp