| Selenium概述Selenium是一款开源的Web自动化框架,模拟用户操作浏览器的行为,主要用于界面自动化、浏览器兼容性测试。优点:
 1、跨平台,如:Windows、Linux 和 Mac等;
 2、支持各种浏览器,如:Chrome、Firefox、Edge、IE、Opear等;
 3、完全开源。
 webdriver:
 将浏览器原生的API封装成WebDriver API ,作为编程语言与浏览器通信的桥梁,从而达到操作浏览器的目的。
 
  注:不同的浏览器,需要不同的webdriver,且webdriver的版本号与浏览器版本号需对应。
 Selenium操作浏览器1.启动浏览器导包: from selenium import webdriver
 1)直接指定driver的路径本文以Chrome浏览器为例 driver = webdriver.Chrome(executable_path="driver路径")
 2)设置driver的环境变量将webdriver放置路径添加环境变量:环境变量添加步骤:桌面—>我的电脑—>属性—>高级系统设置—>环境变量—>系统变量找到path并选中—>点击编辑—>新建—>保存,如下步骤:
 
  
  
  推荐:一般直接将对应浏览器版本的driver文件放置在在python的安装目录下,省去再次添加环境变量(本人常用方法)。设置环境变量后,可不用再次指定driver路径:
 driver = webdriver.Chrome()
 2.打开网页urldriver.get("http://xxxx")
 3.浏览器其它控制driver.maximize_window()  # 浏览器最大化
driver.minimize_window()  # 浏览器最小化
driver.set_window_size(1980,1080)  # 指定浏览器大小
 4.无界面操作options = webdriver.ChromeOptions()
options.add_argument('--headless') # 设置无界面
driver=webdriver.Chrome(chrome_options=options)
 5.关闭浏览器:close():关闭当前当前浏览器窗口quit():关闭所有页面,即关闭浏览器
 6、其它操作
 前进:driver.forward()
 后退:driver.back()
 刷新:driver.refresh()
 元素定位1.常规定位方法driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_css_selector()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text():模糊查询
 注:查找多个元素:将上述定位方法中的element改为elements即可,如:driver.find_elements_by_name(),唯一属性id除外 2.xpath的定位方法**绝对路径:**以“/”表示,从HTML标签逐层向下寻找,如:/html/body/table/tbody/tr[2]/td[2]/div/div[2]/table[2]/thead/tr/th[1]**相对路径:**以“//”表示,表示任意位置,依据给出的路径匹配节点
 如://*[@id=“fileID”]
 常用函数定位法:
 使用contains方法,如:xpath=//input[contains(@id,‘abcd’)]
 使用text()方法,如:xpath=//button[text()=‘保存’]
 使用starts-with方法(同理还有:ends-with),多用于元素属性部分发生变化的情况,如:
 # 如:id=abcd12312sdfsf342
xpath=//input[starts-with(@id,'abcd')]
 一个元素需要通过多个属性值定位,可以用“and”,如: //span[@id="fileID" and @class='classname']
 3.css定位常用的包含以下几种:类选择:find_element_by_css_selector(".slg")
 id选择:find_element_by_css_selector("#su")
 标签选择:find_element_by_css_selector(“input”)
 属性选择:find_element_by_css_selector("[name=‘kw’]")
 层级关系:
 find_element_by_css_selector(“span>input”)
 find_element_by_css_selector(“form>input:nth-child(2)”) #查找form标签下第2个input元素
 组合选择:find_element_by_css_selector(“form.fm>span>input.slg”)
 其它方式:
 find_element_by_css_selector("[class*=swait_lg]"),查找class属性包含“swait_lg”
 find_element_by_css_selector("[class^=bba]"),以“bba”开头
 find_element_by_css_selector("[class$=abb]"),以“abb”结尾
 …
 元素操作点击:click()清除原有内容:clear()
 输入值:send_keys()
 获取内容:text
 获取元素属性:get_attribute()
 判断元素是否显示:is_displayed()
 焦点转换1、转移到弹窗: ele = driver.switch_to.alert
ele.accept() # 接受
ele.text # 获取弹窗内容
ele.dismiss() # 退出或取消
 2、页内焦点切换: driver.switch_to.frame(frame)退出当前焦点窗口到原窗口:driver.switch_to.default_content()
 3、多窗口切换:
 driver.switch_to.window(name)
handles=driver.window_handles()
driver.switch_to.window(handles[-1])
 等待selenium有3种等待方式:1、强制等待
 time.sleep(2)
 2、显示等待(局部,针对某个元素) WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())
 3、隐式等待(全局,可解决大部分的元素等待问题) driver.implicitly_wait(20)
 截图1.截取整个网页: driver.get_screenshot_as_base64()  # 保存的是base64的编码格式
driver.save_screenshot('XX/XX.png')  # 如果在alert之类的弹出对话框出现后截图,程序会抛出异常
driver.get_screenshot_as_png()  # 保存的是二进制数据,需要写成图片文件保存
driver.get_screenshot_as_file('XX/XX.png')  # 获取当前window的截图,截图成功返回True,出现IOError的时候返回False
 2.截小图: ele.screenshot()
ele = driver.find_element_by_id('msg')
ele.screenshot('./3.png')
 鼠标键盘操作常用工具:Actionchains、pymouse、pykeyboard、pyautogui1.Actionchains常用鼠标操作:
 单机:click()
 双击:double_click()
 移动到某个元素上:move_to_element
 在某个元素上悬停:click_and_hold
 将一个元素拖到另一个元素上:drag_and_drop
 用法:
 from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).context_click(driver.find_element_by_id('su')).perform()
 注:鼠标的所有事件,必须使用perform()执行所有ActionChains中存储的行为 2.键盘操作: from selenium.webdriver.common.keys import Keys
send_keys(Keys.ENTER)  # 键盘的回车事件
send_keys(Keys.BACKSPACE)  # 删除,回退
# 组合使用
send_keys(Keys.CONTROL,'a')  # 全选
send_keys(Keys.CONTROL,'c')  # 复制
 调用JS方法用法:driver.execute_script(js代码)修改只读属性,如:
 driver.execute_script('document.getElementById(\'su\').readOnly=0;')移动到页面底部
 driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")
 注:本文是本人工作中学习及使用到的selenium常用方法,如有错误之处欢迎指出 |