本篇主要讲解“异常处理,自动化悬停以及窗口控制的一些基本操作,包括“异常机制的处理,冻结窗口,模拟鼠标悬停,改变窗口大小以及滚动屏幕等”。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
前置条件:
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
01:异常处理
1)异常概述:调试程序时经常会报出一些异常,这时就需要我们对异常进行捕获处理,防止程序终止。
2)引入原因:代码出错时由于不能执行到driver.quit,需要手动关闭浏览器,其实还需要关闭chromedriver进程,否则进程不会自动退出
3)导致结果:执行大量的自动化用例就会使大量的chromedriver进程没有退出导致内存占用,机器会变卡
import traceback
try:
driver.get('https://www.baidu.com/')
#定位到错误的id元素"kk"
driver.find_element_by_id('kk').send_keys('python')
except:
#打印具体的报错信息
print(traceback.format_exc())
finally:
driver.quit()
02:模拟鼠标悬停
1)引入原因:操作界面时不需要点击他,把鼠标移动到上面就会导致页面的变化
2)实例网址:https://www.vmall.com/
3)冻结窗口:console内输入setTimeout(function(){debugger},3000)使窗口冻结3s来寻找元素☆☆☆
4)selenium怎么模拟这个移动鼠标到某个元素的动作呢?通过ActionChains类
5)移到某个元素表示方法:ActionChains(driver).move_to_element(ele).perform()
6)注意:perform(),执行操作。调用方法后一定要执行perform才能真正执行☆☆☆

(1)操作华为官网中的“笔记本&平板”下的平板电脑并点击
from selenium.webdriver.common.action_chains import ActionChains
driver.get('https://www.vmall.com')
driver.maximize_window()
(2)鼠标悬停在"笔记本&平板"上
ActionChains(driver).move_to_element(driver.find_element_by_id('zxnav_1')).perform()
(3)点击操作
driver.find_element_by_css_selector('[class="category-panels category-panels-1"] li>a[href="/list-317"]').click()
driver.quit()
03:改变窗口大小(set_window_size)
1)引入原因:有些页面需要让元素可见才可定位,此时需要改变窗口大小
2)获取当前窗口的大小:driver.get_window_size()
3)设置窗口的大小:driver.set_window_size(size['width'],size['height'])
4)窗口最大化:driver.maximize_window()
5)注意事项:参数传递宽度和高度,单位是像素
(1)将网易云音乐窗口大小设置为480*600像素,寻找元素
driver.get('https://music.163.com/')
driver.set_window_size(480,600)
driver.find_element_by_id('srch').send_keys('医生\n')
(2)运行结果:ElementNotInteractableException: Message: element not interactable
04:滚动屏幕(scrollBy)
1)使用场景:如果窗口太长,改变窗口大小都不够显示该元素。
2)解决办法: 直接让浏览器执行javascript脚本
3)表示方法:driver.execute_script('scrollBy(x,y)');x向右表示增加,y向下表示增加
4)注意事项:execute_script只接受js代码
(1)对于上面的报错信息我们如何定位固定窗口中的页面元素呢?
driver.get('https://music.163.com/')
driver.set_window_size(480,600)
(2)浏览器执行javascript脚本:x轴向右滑动500个像素
driver.execute_script('scrollBy(500,0)')
driver.find_element_by_id('srch').send_keys('医生\n')
(3)此时元素成功定位
不停的滑动,确定滚动的页面元素
while True:
driver.execute_script('scrollBy(0,200)')
time.sleep(2)
ele=driver.find_element_by_xpath('//*[@id="1"]')
if ele:
break
网友评论