版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
当出现不可点击的情况,解决方法有如下几种:
1.加time.sleep(2)里面的数字可以直接等待渲染或者加载之后,如果对速度要求不高的话一般这种情况可以解决问题啦
2.浏览器的页面并没有完全加载出来,这个时候就需要设置显示等待时间,这里设置为10秒在等待时间内如果某元素达到了判断的条件,那么可以执行下面的操作,如点击等,现设置显示等待时间
wait = WebDriverWait(driver, 10)
wait.until(EC.等待条件((By.节点信息,‘next-checkbox-label’))).click()
**等待条件** 含义
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 节点加载出来,传入定位元组,如(By.ID,’p’)
visibility_of_element_located 节点可见,传入定位元组
visibility_of 可见,传入节点对象
presence_of_all_elements_located 所有节点加载出来
text_to_be_present_in_element 某个节点文本包含某个文字
text_to_be_present_in_element_value 某个节点值包含某文字
frame_to_be_available_and_switch_to_it 加载并切换
invisibility_of_element_located 节点不可见
element_to_be_clickable 节点可点击
staleness_of 判断一个节点是否仍然在DOM,可判断页面是否已经刷新
节点信息 CLASS_NAME /ID/ XPATH/ CSS_SELECTOR等
3.因为网页有时候使用js渲染的,所以我们点击不到,这时候就需要用到js的方法,
element=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'next-checkbox-label')))
driver.execute_script("arguments[0].click();", element)
不懂js同学们可以看看这个https://baijiahao.baidu.com/s?id=1620076858472114075&wfr=spider&for=pc
4.还有一种情况可能是没有下拉到浏览器对应的视图中,这种情况就需要把试图往下拉了。
target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去