• selenium 浏览器常用设置


    1.基础操作

    # 清除数据
    self.browser.find_element_by_id("TPL_username_1").clear()
    # 输入数据
    self.browser.find_element_by_id("TPL_username_1").send_keys(f'{i}')
    # 点击
    self.browser.find_element_by_id("J_SubmitStatic").click()
    # xpath获取
    self.browser.find_element_by_xpath(f'//*[@id="J_QRCodeLogin"]/div[5]/a[1]').click()
    # 鼠标点击
    from selenium.webdriver import ActionChains
    ac = self.browser.find_element_by_xpath('//*[@id="my-page"]/div/div/div/span[1]')
    ActionChains(self.browser).move_to_element(ac).click(ac).perform()
    # 切换到这个iframe  不切换获取不到xpath坐标
    iframe = self.driver.find_element_by_xpath('//*[@id="PU_iframe"]')  
    self.driver.switch_to.frame(iframe)
    # 从frame中切回主文档
    self.driver.switch_to.default_content()  
    # 打开网址
    self.driver.get('https://www.baidu.com/')
    # 执行js
    self.driver.execute_script("var leafArr = $('.leaflet-tooltip'); leafArr.each(function(){$(this).attr('name',$(this).text())})")
    # 关闭driver对象启动的全部页面
    self.driver.quit()
    # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
    self.driver.close()
    # 最大化浏览器
    self.driver.maximize_window()
    # 设置浏览器大小 单位像素
    self.driver.set_window_size(w,h)
    # 设置浏览器位置
    self.driver.set_window_position(x,y) 
    # 后退操作
    self.driver.back()
    # 前进操作
    self.driver.forward()
    # 刷新操作
    self.driver.refrensh()
    # 获取当前页面title信息
    self.driver.title
    # 获取当前页面url信息
    self.driver.current_url
    # 获取打开浏览器窗口句柄
    handles = self.driver.window_handles
    # 获取厂家句柄
    self.driver.switch_to.window(handles[-1])
    # 获取网页源码信息
    self.driver.page_source
    # 目标元素尺寸
    ele = self.driver.find_element_by_id('query')
    ele.size
    # 目标元素文本
    ele = self.driver.find_element_by_id('query')
    ele.text
    # 目标元素属性值
    ele = self.driver.find_element_by_id('query')
    ele.get_attribute('id')
    # 元素是否可见,不可见并不代表不能定位  结果都是True 和 False。
    ele = self.driver.find_element_by_id('query')
    ele.is_displayed()
    # 元素是否可用  结果都是True 和 False。
    ele = self.driver.find_element_by_id('query')
    ele.is_enabled()
    # 元素是否被选中  结果都是True 和 False。
    ele = self.driver.find_element_by_id('query')
    ele.is_selected()
    

    2.等待

    2.1 隐式等待

    # 隐式等待:针对全局元素生效;(讲这个)
    self.driver.implicitly_wait(30) # 一般情况下设置30秒
    

    2.2 显示等待

    # 显示等待:他是针对单个元素生效。
    from selenium.webdriver.support.wait import WebDriverWait
    WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)
    driver: # 传入WebDriver实例,即webdriver.Chrome()
    timeout: # 超时时间,等待的最长时间(同时要考虑隐性等待时间)
    poll_frequency: # 调用until或until_not中的方法的间隔时间,默认是0.5秒
    ignored_exceptions: # 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常, 则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException
    WebDriverWait # 的两种等待方式
    until(method,message)
    method: # 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False
    message: # 如果超时,抛出TimeoutException,将message传入异常
    until_not(method,message)
    # 与until相反,until是当某元素出现或什么条件成立则继续执行,
    until_not # 是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述。
    WebDriverWait(self.driver,10).until(lambda self.driver:self.driver.find_element_by_id("kw")).send_keys("pytest")
    

    3.动态加载 下拉

    self.browser.execute_script("window.scrollBy(0,1000)")
    time.sleep(1)
    self.browser.execute_script("window.scrollBy(0,2000)")
    time.sleep(2)
    self.browser.execute_script("window.scrollBy(0,3000)")
    time.sleep(0.5)
    self.browser.execute_script("window.scrollBy(0,4000)")
    time.sleep(0.5)
    self.browser.execute_script("window.scrollBy(0,5000)")
    time.sleep(0.5)
    self.browser.execute_script("window.scrollBy(0,6000)")
    

    4.模拟鼠标操作

    from selenium.webdriver.common.action_chains import ActionChains
    # 定位目标
    ele = self.driver.find_element_by_id('kw')
    # 实例化 鼠标对象
    action = ActionChains(driver)
    # 鼠标右键
    action.context_click(ele)
    # 鼠标双击
    action.double_click(ele)
    # 悬停
    action.move_to_element(ele)
    # 鼠标拖拽
    red = driver.find_element_by_xpath('//*[@id="div1"]')
    blue = driver.find_element_by_xpath('//*[@id="div2"]')
    action.drag_and_drop(red, blue)
    # 鼠标执行操作!!!不执行没效果
    action.perform()
    

    5.模拟键盘操作

    from selenium.webdriver.common.keys import Keys
    self.browser.find_element_by_id("TPL_username_1").send_keys(Keys.NUMPAD5)
    Keys.BACK_SPACE    # 回退键(BackSpace)
    Keys.TAB    # 制表键(Tab)
    Keys.ENTER    # 回车键(Enter)
    Keys.SHIFT    # 大小写转换键(Shift)
    Keys.CONTROL    # Control键(Ctrl)
    Keys.ALT    # ALT键(Alt)
    Keys.ESCAPE    # 返回键(Esc)
    Keys.SPACE    # 空格键(Space)
    Keys.PAGE_UP    # 翻页键上(Page Up)
    Keys.PAGE_DOWN    # 翻页键下(Page Down)
    Keys.END    # 行尾键(End)
    Keys.HOME    # 行首键(Home)
    Keys.LEFT    # 方向键左(Left)
    Keys.UP    # 方向键上(Up)
    Keys.RIGHT    # 方向键右(Right)
    Keys.DOWN    # 方向键下(Down)
    Keys.INSERT    # 插入键(Insert)
    DELETE    # 删除键(Delete)
    NUMPAD0 ~ NUMPAD9    # 数字键1-9
    F1 ~ F12:F1 - F12键    #
    (Keys.CONTROL, ‘a’)    # 组合键Control+a,全选
    (Keys.CONTROL, ‘c’)    # 组合键Control+c,复制
    (Keys.CONTROL, ‘x’)    # 组合键Control+x,剪切
    (Keys.CONTROL, ‘v’)    # 组合键Control+v,粘贴
    

    6.下拉框

    6.1为什么单独使用下拉框?

    • 如果option选项没有value值的化,css定位或其他定位就不太方便。

    6.2 使用Select类

    • 导包:from selenium.webdriver.support.select improt Select

    • 实例化下拉框:s = Select(element)

    • 调用方法:s.select_by_index()索引从0开始

    6.3 Select类提供的方法

    • select_by_index() # 通过索引定位

    • select _by_value() # 通过value值

    • select_by_visible_text() # 显示文本

    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    driver = webdriver.Chrome()
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    ele = driver.find_element_by_id('selectA')
    
    # 实例化下拉框
    s = Select(ele)
    
    # index 索引方法
    s.select_by_index(1)
    sleep(1)
    
    # value 属性值选择目标元素
    s.select_by_value('sz')
    sleep(1)
    
    # text 采用文本的方式选择目标信息
    s.select_by_visible_text('A北京')
    
    sleep(3)
    
    driver.quit()
    

    7.弹出框

    7.1 为什么要处理弹出框?

    • 一旦出现弹出框,如果不进行处理,则后续操作不可实现

    7.2 弹窗分类

    • 系统弹窗:JS实现

    • 自定义弹窗:前端代码封装

    7.3 对话框的分类:

    • alert:警告框

    • confirm:确认框

    • prompt:提示框

    7.4 如何处理

    • 系统弹窗:上面的对话框处理方式都一样;
    """
    步骤:
    1、需要切换到对话框
    	driver.switch_to.alert
    2、处理对话框
    	alert.text # 获取文本
    	alert.accept() # 接受
    	alert.dismiss() # 拒接
    系统弹窗:
    切换对话框:driver.switch_to.alert
    同意:alert.accept()
    拒绝:alert.dismiss()
    """
    from time import sleep
    
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    driver = webdriver.Chrome()
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    ele = driver.find_element_by_id('selectA')
    
    # 实例化下拉框
    s = Select(ele)
    
    # index 索引方法
    s.select_by_index(1)
    sleep(1)
    
    # value 属性值选择目标元素
    s.select_by_value('sz')
    sleep(1)
    
    # text 采用文本的方式选择目标信息
    s.select_by_visible_text('A北京')
    
    sleep(3)
    
    driver.quit()
    

    8.滚动条

    8.1为什么要是用滚动条?

    在一些特殊场景中,一些按钮是在页面最下角,需要使用滚动条拉到最底层。

    8.2操作步骤

    Selenium框架中没有专门处理滚动条的方法,需要通过调用 Js 代码实现操作;

    1)、第一步:设置操作滚动条操作语句:js_down="window.scollTo(0,1000)"

    0:为左边距-----》水平滚动条

    1000: 为垂直滚动条

    2)、第二步:调用执行js方法,将设置js语句传入方法中

    方法:driver.execute_script(js_down)

    """
    滚动条:selenium中没有滚动条方法,需要js代码实现
    1、准备js代码:"window.scrollTo(0, 1000)"
    2、执行js代码:driver.execute_script(js的变量)
    """
    from time import sleep
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8CA.html')
    sleep(2)
    # 1、准备js代码
    js_down = "window.scrollTo(0, 1000)"
    # 2、执行js代码
    driver.execute_script(js_down)
    
    sleep(3)
    
    driver.quit()
    

    9.切换frame表单

    9.1应用场景:

    处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,因此需要先切换到frame,再进行元素定位操作。

    9.2如何切换frame

    方法:driver.switch_to.frame("id/name/element") 传入的是代表frame唯一的特征值

    from time import sleep
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    
    # 切换到frame
    driver.switch_to.frame('idframe1')
    # 在frame表单中填写信息
    driver.find_element_by_id('userA').send_keys('admin')
    
    sleep(3)
    
    driver.quit()
    

    9.3连续切换frame

    说明:如果要连续切换frame必须要先回到默认页面,才能够实现下一个frame的切换

    回到主页面的方法:driver.switch_to.default_content()

    """
    需要默认切换到frame
    方法:driver.switch_to.default_content()
    """
    from time import sleep
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    
    driver.switch_to.frame('idframe1')
    driver.find_element_by_id('userA').send_keys('admin')
    
    driver.switch_to.default_content()
    driver.switch_to.frame('myframe2')
    driver.find_element_by_id('userB').send_keys('admin4')
    
    sleep(3)
    
    driver.quit()
    

    10.多窗口的切换

    10.1为什么要切换多窗口

    页面是存在多窗口的,但是selenium默认焦点只会在主窗口上的所有元素,不切换窗口,就不能操作除主窗口以外的窗口内元素。

    10.2如何切换

    每个窗口都有唯一的一个句柄值,那么我们就可以通过句柄值来完成窗口的切换操作

    方法:

    1)、driver.current_window_handle (获取当前的句柄值)

    2)、driver.window_handles ( 获取当前由driver启动所有窗口句柄)

    3)、driver.switch_to.window(handle) —> 切换窗口

    """
    多窗口切换
    driver.current_window_handle  获取当前的句柄值
    driver.window_handles  获取driver启动的所有窗口句柄
    driver.switch_to.window(handles[-1]) 切换窗口操作
    """
    from time import sleep
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('file:///D:/%E6%A1%8C%E9%9D%A2/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
    
    driver.find_element_by_id('ZCB').click()
    # 1、获取当前的句柄值
    # print("当前的句柄值是:", driver.current_window_handle)
    
    # 2、
    # 1).切换窗口操作,driver.window_handles 获取driver启动的所有窗口句柄
    handles = driver.window_handles
    
    # 2).切换窗口工作
    driver.switch_to.window(handles[-1])
    driver.find_element_by_id('userB').send_keys('admin9')
    
    sleep(3)
    
    driver.quit()
    

    11.截图操作

    使用的方法:

    driver.get_screenshot_as_file(imgepath)
    

    参数:

    imagepath:为图片要保存的目录地址及文件名称

    """
    截图:driver.get_screenshot_as_file(imgepath)
    """
    from time import sleep
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.baidu.com/')
    
    driver.find_element_by_xpath('//*[@id="kw"]').send_keys('易烊千玺')
    # 截图方法,建议使用png格式 , ./为当前路径,  ../为上一级路径
    driver.get_screenshot_as_file('./info.png')
    
    sleep(3)
    
    driver.quit()
    

    12.验证码

    1、什么是验证码?

    一种随机生成的信息(文字,数字,图片)

    2、验证码的作用?

    防止恶意请求

    3、验证码的处理

    这边讲的是cookie解决

    4、使用cookie 登录

    客户端登录账号后,将登录状态的想关 cookie 信息发给服务器保存,再发送去请求,携带cookie信息如果跟服务器保留的一致,则服务器认为客户端是登录状态。

    5、这里实现自动登录的功能

    1)、准备工作,在客户端登录的状态下,获取cookie字段

    """
    1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
    2、调用方法添加cookie
    	driver.add_cookie(cookie变量)
    # 3、刷新页面 -->发送cookie给服务器验证
    	driver.refresh()
    验证码:
    {'name':'BDUSS',
    'value':'............................'}
    """
    from time import sleep
    
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.baidu.com/')
    driver.maximize_window()
    
    # 1、整理cookie信息为字典数据,对应的是name和value,保存的一个变量中
    cookie_value = {'name':'BDUSS',
    'value':'........................'}
    
    # 2、调用方法添加cookie
    driver.add_cookie(cookie_value)
    
    # 3、刷新页面 -->发送cookie给服务器验证
    driver.refresh()
    
    sleep(3)
    
    driver.quit()
    
  • 相关阅读:
    Docker搭建NSQ实时分布式消息集群
    雪花算法
    代码抽象三原则
    PostgreSQL12-主从复制
    logrus日志框架
    Golang中的布隆过滤器
    golang-Json编码解码
    List分组迭代器
    redis-cli命令行远程连接redis服务
    pycharm常用快捷键与设置
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/16016033.html
Copyright © 2020-2023  润新知