多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## **一、元素操作** 2.1 方法 ~~~ 1) .send_keys() # 输入方法 2).click() # 点击方法 3).clear() # 清空 ~~~ 2.2 提示: 1. 在输入方法之前一定要清空操作。 <details> <summary>test01.py</summary> ``` # test01.py from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") driver.find_element_by_css_selector("#userA").send_keys("admin") driver.find_element_by_css_selector("#passwordA").send_keys("123456") driver.find_element_by_css_selector(".telA").send_keys("1861111222") driver.find_element_by_css_selector("#emailA").send_keys("123@qq.com") sleep(2) # 修改电话号码 ---> 清空操作 driver.find_element_by_css_selector(".telA").clear() driver.find_element_by_css_selector(".telA").send_keys("186222333") sleep(2) driver.find_element_by_css_selector("button").click() sleep(2) driver.quit() ``` </details> <br /> ## **二、浏览器常用操作API** **2.1 方法** ~~~ 1) .driver.maximize _window()   # 最大化浏览器 2) .driver.set_window_size(w,h)   # 设置浏览器大小,单位像素 3) .driver.set_window_position(x,y)   # 设置浏览器位置 4) .driver.back() # 后退操作 5) .driver.forward() # 前进操作 6) .driver.refresh() #刷新操作 7) .driver.cloge() # 关闭当前主窗口(主窗口:默认启动哪个界面,就是主窗口) 8) .driver.quit() # 关闭由driver对象启动的所有窗口 9) .driver.title # 获取当前页面title信息 10) .drive.current_url # 获取当前页面ur1信息 ~~~ <details> <summary>test02_最大化、位置、大小、前进后退.py</summary> ``` # test02_最大化、位置、大小、前进后退.py from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") driver.maximize_window() sleep(2) driver.set_window_size(300, 200) sleep(2) driver.set_window_position(320, 150) sleep(2) driver.maximize_window() driver.find_element_by_partial_link_text("访问").click() sleep(2) driver.back() sleep(2) driver.forward() sleep(2) driver.quit() ``` </details> <br /> **2.2提示:** ``` 1.driver.title 和driver.current_url 没有括号,应用场景:一般为判断上步操作是否执行成功。 2. driver.maximize_window() #一般为我的前置代码,在获取driver后,直接编写最大化浏览器 3. driver.refresh() 应用场景,在后面的cookie章节会使用到。 4. driver.close()与driver.quit()区别: close():关闭当前主窗口 quit():关闭由driver对象启动的所有窗口 提示:如果当前只有1个窗口,close与quit没有任何区别。 ``` <details> <summary>test03_refresh、close、quit、title、current_rul.py</summary> ``` # test03_refresh、close、quit、title、current_rul.py from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() sleep(2) driver.find_element_by_css_selector("#user").send_keys("admin") driver.refresh() title = driver.title print("当前页面title为:", title) current_rul = driver.current_url print("当前页面url地址为:", current_rul) driver.find_element_by_partial_link_text("注册A网页").click() sleep(3) driver.close() sleep(2) driver.quit() ``` </details> <br /> ## **三、元素信息操作API** **3.1方法:** ~~~ 1).text获取元素文本   如:driver.text ​ 2).size获取元素大小如:driver.size ​ 3).get_attribute 获取元素属性值 如:driver.get_attribute("id") ​ 4) .is displayed 判断元素是否可见 如:element.is_displayed() ​ 5) .is_enabled 判断元素是否可用 如:element.is_enabled() ​ 6) .is_selected 判断元素是否被选中   如:element.is_selected() ~~~ **3.2提示:** ``` 1. text和size调用时无括号 2. get_attribute一般应用场景:判断一组元素是否为想要的元素或者判断元素属性值是否正确 3. is_displayed、is_enabled、is_selected,在特殊应用场景中使用。 ``` <details> <summary>test04_元素常用信息操作方法.py</summary> ``` # test04_元素常用信息操作方法.py from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册实例.html") driver.maximize_window() sleep(2) size = driver.find_element_by_css_selector("#userA").size print('用户名大小为:', size) text = driver.find_element_by_css_selector("a").text print("页面中的第一个A标签为:", text) att = driver.find_element_by_css_selector("a").get_attribute("href") print("页面中的第一个a标签为href属性值为:", att) display = driver.find_element_by_css_selector("span").is_displayed() print("span元素是否可见:", display) enabled = driver.find_element_by_css_selector("cancel").is_selected() print("取消按钮是否可用:", enabled) selected = driver.find_element_by_css_selector("#ly").is_selected() print("旅游是否被选中:", selected) sleep(2) driver.quit() ``` </details> <br /> ## **四、鼠标操作** ~~~ 4.1 为什么使用鼠标操作? 为了满足丰富的html鼠标效果,必须使用对应的方法。 ​ 4.2 鼠标事件对应的方法在哪个类中 ActionChains类--->导包from selenium.webdriver.common.action_chai import ActionChains ​ 4.3 鼠标事件常用的操作方法 ​ 1. context_click() # 右击   应用:context_click(element).perform() ​ 2. double_click() # 双击   应用:double_click(element).perform() ​ 3. drag_and_drop() # 拖拽 ​ 4. move_to_element() # 悬停   应用:move_to_element(element).perform() ​ 5. perform() # 执行以上事件方法 ~~~ **4.4提示:** 1. selenium框架中虽然提供了,右击鼠标方法,但是没有提供选择右击菜单方法,可以通过发送快捷键的方式解决(经测试,谷歌浏览器不支持)。 <details> <summary>test05_mouse_扩展选择右键菜单.py</summary> ``` # test05_mouse_扩展选择右键菜单.py # 右键菜单只适用firefox、IE,chrome不支持 from selenium import webdriver from time import sleep from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Firefox() driver.get("D:\web自动化素材\课堂素材\注册实例.html") # 实例化并获取 ActionChains类 action = ActionChains(driver) # 定位用户名 在用户名上 右击鼠标 预期:粘贴 username = driver.find_element_by_css_selector("#userA") action.context_click(username) # 发送p username.send_keys("p") ``` </details> <br /> <details> <summary>test06_mouse_drag_and_drop.py</summary> ``` # test06_mouse_drag_and_drop.py from selenium import webdriver from time import sleep from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Firefox() driver.get("D:\web自动化素材\课堂素材\注册实例.html") # 实例化并获取 ActionChains类 action = ActionChains(driver) source = driver.find_element_by_css_selector("#div1") target = driver.find_element_by_css_selector("#div2") sleep(2) action.drag_and_drop(source, target).perform() # 扩展 通过坐标偏移量执行 action.drag_and_drop_by_offset(source, xoffset=360, yoffset=180).perform() sleep(2) driver.quit() ``` </details> <br /> <details> <summary>test07_mouse_回顾.py</summary> ``` # test07_mouse_回顾 from selenium import webdriver from time import sleep from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Firefox() driver.get("D:\web自动化素材\课堂素材\注册实例.html") ''' 目标:基于selenium完成 鼠标事件操作 说明: 1.selenium框架中将鼠标操作的一系列方法封装在 ActionChains类中 方法: 1.双击 double_click() 2.右击 context_click() 3.悬停 move_to_element() 4.拖拽 drag_and_drop() 5.执行 perform() 操作: 1.导入 ActionChains类 位置:from selenium.webdriver.common.action_chains import ActionChains 2.实例化 匿名:ActionChains(driver).double_click(element).perform() 匿名:ActionChains(driver).context_click(element).perform() 实名:action = ActionChains(driver) 3.调用响应的方法: 如: 1.ActionChains(driver).double_click(element).perform() 2.action.double_click(element).perform() 注意: 鼠标操作方法,必须调用perform()才能执行 ''' ``` </details> <br /> ## **五、键盘操作** ~~~ 5.1 键盘对应的方法在Keys类中 包:from selenium.webdriver.common.keys import Keys ​ 5.2 常用的快捷键: CONTROL: Ctrl键 其他,请参考Keys底层定义的常量 ​ 5.3 应用 组合键:element.send_keys(Keys.XXX, 'a') 单键:element.send_keys(Keys.XXX) ~~~ <details> <summary>test08_keys.py</summary> ``` # test08_keys from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("D:\web自动化素材\课堂素材\注册实例.html") ''' 目标: 学习使用基于 selenium 完成键盘操作 案例: 1.输入用户名 admin1 2.删除 1 3.全选 用户名 "admin" Ctrl+a 4.复制 admin Ctrl+c 5.粘贴将复制的 admin粘贴到密码框 ''' username = driver.find_element_by_css_selector("#userA") username.send_keys("admin1") sleep(2) # 删除1 username.send_keys(Keys.BACK_SPACE) sleep(2) # 全选 admin Ctrl+a username.send_keys(Keys.CONTROL, "a") sleep(2) # 复制 Ctrl+c username.send_keys(Keys.CONTROL, "c") sleep(2) # 定位密码框 并执行 Ctrl+v driver.find_element_by_css_selector("#passwordA").send_keys(Keys.CONTROL, "v") sleep(2) driver.quit() ``` </details> <br /> ## **六、元素等待** ``` 6.1 为什么要设置元素等待 由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。 6.2 什么是元素等符 元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。 6.3 元素等待分类 1.隐式等待 2.显示等待 6.4 隐式等待 方法:driver.implicity_wait(30) #一般情况下设置30秒 特色: 1.针对所有元素生效。 2.一般情况下为前置必写代码(1.获取浏览器驱动对象;2.最大化浏览器;3.设置隐式等待) ``` <details> <summary>test09_隐式等待.py</summary> ``` # test09_隐式等待 from selenium import webdriver from time import sleep driver = webdriver.Firefox() # 设置元素等待 隐式等待 重要!!! # 设置隐式等待10秒 driver.implicitly_wait(10) driver.get("D:\web自动化素材\课堂素材\注册实例.html") ''' 目标:隐式等待使用 ''' # 给一个错误的id,不能知道,如果直接抛出异常,说明等待失效。 # 如果在设置指定时长以外抛出说明等待生效 driver.find_element_by_css_selector("#user").send_keys("admin") sleep(2) driver.quit() ``` </details> <br /> <br /> **6.5显示等待** ``` 方法:WebDriverwait(driver,timeout=10,poll_frequency=0.5).until(lambda x:x.find_element_by_id("#user")).send_keys("admin") 参数: timeout:超时时间 po11_frequency:访问频率,默认0.5秒找一次元素 x:x为driver,它是WebDriverWait类将传入的driver赋值给类self._driver,unti1方法调用了self._driver; 提示: 1.WebDriverWait(driver,timeout=10,pol1_frequency=0.5).until(lambda x:x.find_element _by_id("#user"))返回的一个元素。 ``` <details> <summary>test10_显示等待.py</summary> ``` # test10_显示等待 from selenium import webdriver from time import sleep from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Firefox() # 设置元素等待 隐式等待 重要!!! # 设置隐式等待10秒 driver.implicitly_wait(10) driver.get("D:\web自动化素材\课堂素材\注册实例.html") ''' 目标:显示等待使用 操作: 1.导包 WebDriverWait()类 2.实例化 WebDriverwait()类并调用until(method)方法 method:匿名函数 lambda x:x.find_element_by_id() 需求: 定位用户名输入admin ''' # 实例化WebDriverWait()并调用until方法 # 注意:调用until方法返回的一定是一个元素 username = WebDriverWait(driver, timeout=30, poll_frequency=0.5).until(lambda x:x.find_element_by_id()) # 注意:此时username还不是元素,只有代码运行起来才是元素 username.send_keys("admin") sleep(2) driver.quit() ``` </details> <br /> <br /> **6.6显示等待与隐式等待区别:** 1. 显示等待:针对单个元素生效 2. 隐式等待:针对全局元素生效 <details> <summary>test11_上传文件.py</summary> ``` # test11_上传文件 from selenium import webdriver from time import sleep from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() # 设置元素等待 隐式等待 重要!!! # 设置隐式等待10秒 driver.implicitly_wait(10) driver.get("D:\web自动化素材\课堂素材\注册实例.html") # 错误的实现 # driver.find_element_by_css_selector("[name='upfilea']").click() # 正确的实现 driver.find_element_by_css_selector("[name='upfilea']").send_keys("D:\hello.txt") sleep(2) driver.quit() ``` </details> <br />