本文主要是介绍python+selenium定位不到元素的5大类原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
页面元素定位不到?
一、确认定位代码没写错:避免使用动态ID
1、可以去控制台调试$x+xpath,2、直接在 element 按 Ctrl + F
二、增加等待时间:页面没加载出来,可以解决60%的问题
强制等待:time.sleep(2)等待2s,不管页面有没有加载出来,比较死板,时间到了就继续执行下一个语句
隐式等待:driver.implicitly(3)这个等待表示在规定的时间内页面所有的元素都加载出来了才执行下一步,否则一直等待时间截止。缺点是如果你想要的元素已经加载出来了,但是你需要等待页面上所有的元素都加载出来才能执行下一步
显示等待:WebDriverWait (driver,10,1).until(EC.title_contains(‘登录’)),每隔1s去检查一下元素是否出现,出现了就执行下一步,否则等到10s结束,如果未出现就会报异常
隐式等待一般用于整个页面所有元素的等待,而显示等待适用于单个元素,常跟EC里边的函数一起用。强制等待不依赖于页面加载,会严重影响代码质量
三、Switch_to方法,切iframe或者windows窗口
current_window_handle 获取当前WebDriver对象的页面窗口句柄
window_handles 获取当前浏览器所有页面的窗口句柄。返回的是个List对象
switch_to.window(window_name) 切换到相关页面,window_name传入的是句柄
switch_to.frame(frame_reference) 切换到对应的子frame下(只能子frame,不能孙frame)
switch_to.parent_frame() 切换到父frame下
switch_to.default_content() 切换到主页(即退出了frame,回到最初的页面)
————————————————
四、需要进行鼠标拖,滚的操作
鼠标悬浮
action = ActionChains
action.move_to_element().perform()
鼠标拖拽
action.drag_and_drop(driver,‘element’,‘target’,).perform()
按下鼠标左键在一个元素上,可以用pause,release,perform
action.click_and_hold().perform()
或者导pyautogui
pyautogui中函数大致分为通用功能、鼠标控制、键盘控制、消息窗口、截图5大类。
五、前端设置了不可操作
这篇关于python+selenium定位不到元素的5大类原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!