[英]Not able to click on a input type submit button using Selenium Python
不知道為什么,但可能是 JS 或隱藏元素之類的東西。
我需要點擊“確認”按鈕,但由於某種原因它不可點擊。
這個按鈕與我填寫表格的其他按鈕不同。
這是這個按鈕的html
<input type="submit" name="ctl00$WpModaisCrm1$ctl03$btnRegistrarProtocolo" value="Confirmar" id="btnRegistrarProtocolo" class="btn btn-primary pull-right" autocomplete="off">
“取消”按鈕 html 是:
<input type="submit" name="ctl00$WpModaisCrm1$ctl03$btnCancelarProtocolo" value="Cancelar" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$WpModaisCrm1$ctl03$btnCancelarProtocolo", "", true, "", "", false, false))" id="ctl00_WpModaisCrm1_ctl03_btnCancelarProtocolo" class="btn btn-primary button-padding" data-dismiss="modal" autocomplete="off">
這個 HTML 有一個隱藏元素
<input type="submit" name="ctl00$WpModaisCrm1$ctl03$btnCarregarUcProtocoloAtendimento" value="" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$WpModaisCrm1$ctl03$btnCarregarUcProtocoloAtendimento", "", true, "", "", false, false))" id="btnCarregarUcProtocoloAtendimento" style="display: none" autocomplete="off">
代碼:
confirmar = driver.find_element_by_id("btnRegistrarProtocolo")
print(confirmar.is_enabled()) # return True
print(confirmar.is_displayed()) # return True
print(confirmar.is_selected()) # return False
confirmar.submit() # doesn't work
confirmar.click() # doesn't work
click()
和submit()
什么都不做...
編輯
我也無法使用“Tab”到達“確認”按鈕,只能使用鼠標
文本為Confirmar的元素是啟用了JavaScript 的元素,因此您必須為element_to_be_clickable()
引入WebDriverWait並且您可以使用以下任一定位器策略:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#btnRegistrarProtocolo[value='Confirmar']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='btnRegistrarProtocolo' and @value='Confirmar']"))).click()
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
我知道我在這里有點晚了,但是這個與交互性有關的特殊問題 - 即使在您發現的 DOM 中找到元素的情況下 - 也可能由於我的經驗中的兩個問題而傳播; 要么其他 JS 元素實際上在 DOM 中的位置“礙事”,要么您正在處理像輸入這樣的不守規矩的元素類型。
這兩種情況下的解決方法通常是直接調用 JS 而不是通過 Python 通過 execute_script() 像這樣調用:
confirmar = driver.find_element_by_id("btnRegistrarProtocolo")
driver.execute_script('arguments[0].click();', confirmar)
如果您發現這不起作用,那將是因為頁面上有多個具有相同選擇器的元素,在這種情況下,您應該通過 XPath 定位該元素。 您可以通過檢查 find_elements() 上的長度來測試這一點,如下所示:
registrars = driver.find_elements(by='id','btnRegistrarProtocolo')
或者
registrars = driver.find_elements_by_id('btnRegistrarProtocolo')
if len(registrars) > 1:
print('Wow I might've been clicking the wrong element this whole time!')
you are interacting with.作為一個規范性的標准,我總是利用XPath來定位元素,只是因為如果正確使用它留下一點不含糊在與互動的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.