Selenium WebDriver——必会知识
在介绍之前先来说一下HTML、Selenium、WebDriver的关系HTML超文本标记语言它是一个网页的骨架通过各种标签和属性id、class定义了页面的元素DOM模型当浏览器解析HTML后会在内存中对HTML结构生成一个DOM树。如图所示Selenium是一个自动化工具/API通过它来抓取到DOM模型上的元素WebDriver驱动程序是一个API或协议selenium独有的selenium需要用WebDriver控制浏览器做进行抓取每一个浏览器都由一个特定的WebDriver实现支持例如chrome需要chrome driver它负责浏览器和Selenium之间的通信Locator定位器Selenium实现抓取元素的具体工具利用自身包含的8种定位器抓取元素1、元素定位八大方法基础定位id通过元素id属性定位driver.find_element(By.ID,login_btn)name通过name属性定位用于表单中的输入框driver.find_element(By.NAME,username)class_name:通过class属性定位如果有多个class用空格隔开只能选其中一个driver.find_element(By.CLASS_NAME,s_ipt)链接定位针对a标签link_text: 通过链接的完整文本定位driver.find_element(By.LINK_TEXT, 新闻 )partial_link_text:通过链接的部分文本定位driver.find_element(By.PARTIAL_LINKLTEXT,新)标签与结构定位万能tag_name:通过标签名定位如div,input)driver.find_element(By.TAG_NAME,input)xpath:万能定位器而已根据层级、属性、文本等文件组合定位driver.find_element(By.XPATH,//*[id,ui] // a[text()新闻])css_selector:性能最高的复杂定位方法速度比xpath快driver.find_element(By.CSS_SELECTOR,#u1.s_ipt)这里继续补充知识点1、Webdriver是驱动程序的统称每个浏览器都有自己名字的Driver为什么不能通用因为每个浏览器的内核不一样它们解析出的DOM树逻辑是一样的但每个浏览器内部调用底层节点的API不一样为了抹平差异利用WebDriver写python代码实现在不同浏览器上运行2、WebDriver没每次“抓取”信息过程发出请求调用find_element编码传输selenium将动作打包成HTTP请求驱动执行收到请求后在浏览器生成的DOM树扫描返回结果将抓取到的内容打包成HTTP响应传回代码3、现在更流行另一种工具——PlayWright为什么selenium比PlayWright慢Selenium基于WebDriver单向通信每次操作又要发送一次请求遇到网络延迟累加就会很慢PlayWright是基于WebSocket双向通信实时监听浏览器的动作不需要下载匹配版本的驱动文件效率更高2、selenium的页面操作点击、输入、下拉框、弹窗处理等怎么实现基础动作输入文本send_keysinput_boxdriver.find_element(By.ID,kw) input_box.send_keys(小徐学编程)点击元素search_btndriver.find_element(By.ID,xu) search_btn.click()清空输入框input_box.clear()下拉框处理Select类普通HTML有select按钮可以直接用click 点击from selenium.webdriver.support.ui import Select #定位到select本身 dropdown Select(driver.find_element(By.ID,city_select)) dropdown.select_by_index(1) #根据索引选 dropdown.select_by_value(sh) #根据value 属性选 dropdown.select_by_visible_text(北京) #根据显示的文字选网页弹窗由Javascript触发的alert, confirm , prompt不属于DOM树鼠标无法点击必须要用到 switch_to 切换到警告框#切换到当前的弹窗 alert driver.switch_to.alert print(alert.text) #输出弹窗里的文字 alert.accept() #点确定 #alert.dismiss() #点取消 #alert.send_keys(输入内容) #输入内容鼠标悬停与拖拽from selenium.webdriver.common.action_chains import ActionChains menudriver.find_element(By.ID,user_menu) #鼠标悬停在菜单上 ActionChains(driver).move_to_element(menu).perfom() #从source元素拖拽到target sourcedriver.find_element(By.ID,draggable) targetdriver.find_element)BY.ID,droppable) ActionChains(driver).drag_and_drop(source,target).perfom()重点多窗口与Iframe切换问题某些元素定位是对的但找不动元素Iframe切换有些网页藏在iframe标签里#切换进iframe driver.switch_to.frame(login_frame) #操作完成后必须切回到主页面 driver.switch_to.default_content()多窗口切换点击链接跳出新的标签页WebDriver的焦点还在旧页面#获取所有窗口句柄 handlesdriver.windows_handles #切换到最新打开窗口 driver.switch_to.windows(handles[-1])3、等待机制显示等待使用场景异步类型的异步加载的元素点击按钮后由Javascript生成的弹窗和列表项状态切换验证按钮在点击后需要等进度条消失页面跳转等URL包含某个特定的关键词、页面标题发生变化上传/下载文件上传下载时出现提示文字注意事项必须配合定位器使用传入By和expected_conditions遇到长代码时和代码一起封装进去针对不同的操作设置不同的超时隐式等待在项目初期搭建项目结构简单时网页加载速度快、异步请求较少可以用隐式等待做一个基本的全局保障保底机制设置一个较短时间5″防止网络抖动导致脚本崩塌注意显示等待和隐式等待不能混用在同一个项目代码逻辑中先执行until拿到元素对象再执行等待操作显示等待抛出超时异常时要考虑代码逻辑中是否捕获做一些截图、清除缓存的处理
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2528634.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!