簡體   English   中英

Selenium 找不到要點擊的 div 元素

[英]Selenium can't find the div element to click

我正在使用 selenium 通過 webdriver 自動化一些任務。

結果我找不到要點擊的 div,硒就是找不到它。

有人有建議嗎?

HTML :

<div aria-controls="leftAdvPnl_body" aria-expanded="false" aria-haspopup="true" class="rich-stglpanel-header " id="leftAdvPnl_header" onclick="SimpleTogglePanelManager.toggleOnClient(event,'leftAdvPnl');" onkeypress="return keypressclickhandle(event);" role="link" tabindex="0"><div aria-hidden="true" class="rich-stglpanel-marker"><div class="rich-stglpnl-marker" aria-hidden="true" id="leftAdvPnl_switch_on" style="display: none">«</div><div class="rich-stglpnl-marker" aria-hidden="true" id="leftAdvPnl_switch_off">»</div></div><span id="leftAdvPnl_header_label">Pesquisar</span><span aria-hidden="true">&nbsp;</span></div>

代碼植物:

while len(navegador.find_elements_by_xpath('//*[@id="leftAdvPnl_header"]')) < 1:
    time.sleep(1)
    print("Procurando formulário do processo")

link=navegador.find_element_by_xpath("//*[@id="leftAdvPnl_header"]")
link.click()

謝謝!

您有 2 個嵌套的雙引號,而不是"//*[@id="leftAdvPnl_header"]"使用'//*[@id="leftAdvPnl_header"]'

您需要等待元素可點擊,因此請嘗試:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="leftAdvPnl_header"]'))).click()

如果我們在HTML DOM是否有唯一條目,請檢查dev tools (谷歌瀏覽器)。

您應該檢查的 xpath :

//div[@id='leftAdvPnl_header']

檢查步驟:

Press F12 in Chrome -> 轉到element部分 -> 執行CTRL + F -> 然后粘貼xpath並查看您想要的element是否被1/1匹配節點突出顯示

如果我們有 1/1 匹配節點,請確保:

  1. 此 div 不在 iframe 下。
  2. 這個 div 不在 shadow-root 下。
  3. 您不應該在 selenium 啟動的新選項卡/窗口上。

代碼 :

try:
    WebDriverWait(navegador, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='leftAdvPnl_header']"))).click()
    print("Clicked on web element")
except:
    pass

進口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

要單擊帶有Pesquisar文本的元素,您可以使用以下任一定位器策略

  • 使用css_selector

     driver.find_element(By.CSS_SELECTOR, "div.rich-stglpanel-header#leftAdvPnl_header span#leftAdvPnl_header_label").click()
  • 使用xpath

     driver.find_element(By.XPATH, "//span[text()='Pesquisar' and @id='leftAdvPnl_header_label']").click()

理想情況下,要單擊元素,您需要為element_to_be_clickable()引入WebDriverWait ,您可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.rich-stglpanel-header#leftAdvPnl_header span#leftAdvPnl_header_label"))).click()
  • 使用XPATH

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Pesquisar' and @id='leftAdvPnl_header_label']"))).click()
  • 注意:您必須添加以下導入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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