解決Selenium報錯「Element is not clickable at point...」的四種方法

 

點擊報錯

使用Selenium時,觸發點擊事件,常常報以下異常:css

Element is not clickable at point

緣由及解決方法

無外乎四種緣由html

1. 未加載

沒加載出來就等待元素加載出來,再往下執行。 
能夠使用python庫timepython

import time 
time.sleep(3)

不過最好仍是使用selenium自帶WebDriverWaitweb

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver, 10).until(EC.title_contains("元素"))

WebDriverWait的具體用法請點擊參考文檔api

2. 在iframe裏

若是元素在iframe裏,在窗口裏找是找不到元素的,更是沒法點擊。因此,要切換到iframe裏去找元素。框架

driver.switch_to_frame("frameName")  # 根據框架名來切換
driver.switch_to_frame("frameName.0.child")  # 子框架
driver.switch_to_default_content()  # 返回

其餘相關切換,請點擊參考文檔網站

3. 不在視窗裏,須要拉滾動條

不少網站的列表頁不是立馬返回全部內容,是根據視圖來顯示的。因此,咱們就須要拖動滾動條來把要獲取的內容顯示到視窗裏才能夠獲取到。ui

page = driver.find_element_by_partial_link_text(u'下一頁')
driver.execute_script("arguments[0].scrollIntoView(false);", page)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, u'下一頁'))).click()

關於下拉滾動條的內容能夠參考博客spa

4. 要點擊的元素被覆蓋

能夠使用事件鏈來解決 
例以下拉菜單,經過hover,讓子菜單顯示,就能夠點擊了。.net

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

關於事件鏈詳情,請點擊文檔。 

相關文章
相關標籤/搜索