使用Selenium時,觸發點擊事件,常常報以下異常:css
Element is not clickable at point
無外乎四種緣由html
沒加載出來就等待元素加載出來,再往下執行。
能夠使用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
若是元素在iframe裏,在窗口裏找是找不到元素的,更是沒法點擊。因此,要切換到iframe裏去找元素。框架
driver.switch_to_frame("frameName") # 根據框架名來切換 driver.switch_to_frame("frameName.0.child") # 子框架 driver.switch_to_default_content() # 返回
其餘相關切換,請點擊參考文檔網站
不少網站的列表頁不是立馬返回全部內容,是根據視圖來顯示的。因此,咱們就須要拖動滾動條來把要獲取的內容顯示到視窗裏才能夠獲取到。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
能夠使用事件鏈來解決
例以下拉菜單,經過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()
關於事件鏈詳情,請點擊文檔。