使用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()
关于事件链详情,请点击文档。