[英]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.