簡體   English   中英

無法使用 Selenium Python 單擊輸入類型提交按鈕

[英]Not able to click on a input type submit button using Selenium Python

html確認按鈕

不知道為什么,但可能是 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(&quot;ctl00$WpModaisCrm1$ctl03$btnCancelarProtocolo&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, 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(&quot;ctl00$WpModaisCrm1$ctl03$btnCarregarUcProtocoloAtendimento&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="btnCarregarUcProtocoloAtendimento" style="display: none" autocomplete="off">

HTML

形式

代碼:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM