簡體   English   中英

消息:嘗試通過Selenium和Python單擊復選框時,元素不可見

[英]Message: element not visible when tring to click a checkbox through Selenium and Python

我正在嘗試使我一直在從事的項目的一部分自動化。 項目的這一部分應進入頁面並獲得隨機生成的密鑰。 要獲取密鑰,請轉到網頁,登錄,然后按一些按鈕以獲取新密鑰。 我一直在將Selenium與Chrome驅動程序配合使用。

driver = webdriver.Chrome()

當我必須選中一些復選框時,問題開始了。

該頁面的外觀如下: https : //imgur.com/a/p3kmklT

源文件看起來像其JavaScript呈現的那樣。

到目前為止,我已經嘗試過:通過id獲取它:

checkbox = label.find_element_by_id("agreed")
checkbox.click()

通過XPath獲取它:

checkbox = driver.find_element_by_xpath('//*[@id="agreed"]')

兩者都給我:

Message: element not visible

我也嘗試過等待它可見,但是它只是等待並最終給我以下內容:

checkbox = WebDriverWait(driver, 3).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="agreed"]')))
checkbox.click()

輸出:

Message: 

您應該在控制台中檢查該ID是否僅返回一個或多個元素,然后再返回一個。 有時,相同ID或選擇器的DOM中會包含多個元素。 其中一個隱藏,一個可見。 您必須找到可見的一個並單擊它。 另外,請檢查iframe中是否不存在該元素。

在控制台中,編寫以下行以查看此id的元素數:

$x("//*[@id='agreed']")

希望對您有幫助。

要按與我同意API服務協議的方式單擊與帶有文本的元素關聯的復選框 ,而不是調用visible_of_element_located visibility_of_element_located() ,則需要調用element_to_be_clickable()並且可以使用以下任一解決方案:

  • CSS_SELECTOR

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for='agreed']"))).click() 
  • XPATH

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='agreed']"))).click() 

始終牢記使用driver.implicitly_wait(X) ,其中X是秒數,使驅動程序在找不到元素時自動重試。 除了瀏覽器自動化之外,您是否嘗試捕獲請求? 在類似的情況下,我設法使用會話中的cookie來自動執行發布請求。 如果您不走運,並且一段時間后會話超時,則可以使用Selenium腳本來更新Cookie並繼續執行自動請求。

暫無
暫無

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

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