zoukankan      html  css  js  c++  java
  • selenium常见操作

    导入所需要的模块

    from selenium.webdriver.chrome.options import Options
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

    构建带有参数的谷歌浏览器

    opt = Options()
    opt.add_argument('--no-sandbox')          #解决DevToolsActivePort文件不存在的报错
    opt._arguments = ['disable-infobars']     #去掉谷歌浏览器正在被自动测试控制字样
    opt.add_argument('window-size=1920x3000') #指定浏览器分辨率
    opt.add_argument('--disable-gpu')         #谷歌文档提到需要加上这个属性来规避bug
    opt.add_argument('--hide-scrollbars')     #隐藏滚动条, 应对一些特殊页面
    # 不加载图片, 提升速度
    opt.add_argument('blink-settings=imagesEnabled=false') 
    # 加载用户信息的谷歌浏览器
    opt.add_argument("--user-data-dir="+r"C:UsersAdministratorAppDataLocalGoogleChromeUser Data") 
    opt.add_argument('--headless')            #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
    # 添加UA
    opt.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"')
    opt.add_argument('--no-sandbox')          #以最高权限运行
    opt.add_argument("--disable-javascript")  #禁用JavaScript
    # 设置开发者模式启动,该模式下webdriver属性为正常值
    opt.add_experimental_option('excludeSwitches', ['enable-automation']) 
    # 禁用浏览器弹窗
    prefs = { 'profile.default_content_setting_values' :  { 'notifications' : 2 }}  
    opt.add_experimental_option('prefs',prefs)
    opt.add_argument('--disable-plugins')     #禁止插件
    # 禁用弹出拦截
    opt.add_argument('--disable-popup-blocking')     
    # 调用带参数的谷歌浏览器  
    driver = webdriver.Chrome(chrome_options=opt)  
    
    

    设置窗口大小

    driver.maximize_window()           #窗口最大化
    driver.set_window_size(480, 800)   #设置窗口大小
    

    调节最大等待时间

    wait = WebDriverWait(driver, 15)    
    

    加载指定网址

    driver.get(url)
    

    位置定位及交互

    #查找元素方法
    find_element_by_id
    find_element_by_name
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    #实例
    wait.until(EC.presence_of_element_located((By.XPATH,'')))  #以Xpath定位第一个满足元素,等待最大响应时间 
    driver.find_element_by_xpath('').click()                   #以Xpath定位第一个满足元素,并进行点击操作
    driver.find_elements_by_id("")							   #以属性ID定位所有满足的元素
    driver.find_element_by_id('jgwab').text               	   #获取控件id为’jgwab’所显示的内容
    driver.find_element_by_id('su').get_attribute('type')      #获取控件id为’su’的属性,例如button,radio等
    driver.find_element_by_id('kw').size                       #获得控件的尺寸
    # 以属性ID定位第一个满足元素,等待最大响应时间
    input = wait.until(EC.presence_of_element_located((By.ID, "")))
    input.send_keys('')      #输入文本信息
    input.clear()			 #清空
    
    

    如果以上方法都定位不到控件,说明很可能在iframe里,下面为切换到iframe的方法

    driver.switch_to.frame(1)               #转入网页内iframe(内嵌的网页元素)
    driver.switch_to.parent_frame()         #切回上一层frame
    driver.switch_to_default_content()      #返回到主页面
    

    切换网页窗口

    windows=driver.window_handles        #获得当前浏览器所有窗口
    driver.switch_to.window(windows[0])  #切换到最左侧窗口
    driver.switch_to.window(windows[-1]) #切换到最新打开窗口(注:也就是最右侧窗口)
    
    

    滚动条操作

    # 将滚动条从 0px的地方移动到5000px的地方
    driver.execute_script("window.scrollBy(0,5000)")  
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    # 滚动到页面顶部
    driver.execute_script("window.scrollTo(document.body.scrollHeight,0)")
    # 将滚动条向上移动500px单位
    driver.execute_script("window.scrollTo(document.body.scrollHeight,500)")
    
    

    浏览器操作

    driver.back()         #返回界面
    driver.forward()	  #前进界面
    driver.refresh()      #刷新界面
    

    当前网页信息

    driver.current_url          #获取当前网址
    driver.page_source          #获取源代码
    driver.title                #获取当前页面标题内容
    driver.delete_all_cookies() # 删除所有cookie
    #获取cookies
    driver.get_cookies()  
    cookie_list = []
    for dict in cookies:
        cookie = dict['name'] + '=' + dict['value']
        cookie_list.append(cookie)
    cookie = ';'.join(cookie_list)
    
    

    窗口截图

    driver.get_screenshot_as_file("scr.jpg")
    

    提交表单

    # submit()方法用于提交表单,这里特别用于没提交按钮的情况
    # 例如搜索框输入关键字之后的“回车”操作,那么就可以通过submit()来提交搜索框的内容。
    driver.find_element_by_id('query').submit()
    

    实现某个节点的拖曳操作,将某个节点从一处拖曳到另外一处

    from selenium.webdriver import ActionChains
    source = driver.find_element_by_xpath('')
    target = driver.find_element_by_xpath('')
    actions = ActionChains(driver)
    actions.drag_and_drop(source, target)
    actions. perform()
    
    

    取消选择已经选择的元素

    select = Select(driver.find_element_by_id('id'))
    select.deselect_all()
    

    对话框操作

    alert = driver.switch_to_alert()    #访问对话框
    alert.accept()                      #点击alert对话框的确定按钮
    alert.dismiss()                     #点击alert对话框的取消按钮
    
    

    层级定位

    driver.find_element_by_id('ShippingMethod').find_element_by_xpath("//option[@value='7.45']").click()
    

    元素是否可见

    #返回元素的结果是否可见,返回结果为True 或False
    result=driver.find_element_by_id("kw").is_displayed()
    

    模拟鼠标操作

    from selenium.webdriver.common.action_chains import ActionChains
    # 鼠标右击,perform() 是执行方法的语句
    ActionChains(driver).context_click(driver.find_element_by_xpath("//*[text()='最新热剧']")).perform()
    # 鼠标双击
    ActionChains(driver).double_click(driver.find_element_by_id('kw')).perform()
    # 停留在文本搜索框上
    ActionChains(driver).move_to_element(driver.find_element_by_id('kw')).perform()
    # 点击并且停留在搜索按钮上
    ActionChains(driver).click_and_hold(driver.find_element_by_id('su')).perform()
    
    

    模拟键盘操作

    from selenium.webdriver.common.keys import Keys
    driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)   #Backspace键
    driver.find_element_by_id('kw').send_keys(Keys.SPACE)        #Space键
    driver.find_element_by_id('kw').send_keys(Keys.DELETE)       #Delete键
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')  # CTRL + A
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')  # CTRL + X
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'v')  # CTRL + V
    driver.find_element_by_id('kw').send_keys(Keys.ENTER)        #ENTER键
    driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'c')  # CTRL + C
    driver.find_element_by_id('kw').send_keys(Keys.TAB)          # TAB键
    
    

    关闭浏览器

    driver.close()  #关闭当前窗口
    driver.quit()   #退出浏览器
    
  • 相关阅读:
    LR学习笔记6-常用术语
    LR学习笔记5-LR界面分析3
    LR学习笔记4-LR界面分析2
    LR学习笔记3-LR界面分析1
    Maven快速导出maven工程的依赖包
    Python3 将txt数据转换成列表,进行排序,筛选
    iOS OC环信实时语音切换听筒免提听不到声音报错:AVAudioSessionErrorCodeBadParam
    iOS voip电话和sip软电话 --网络电话
    远程(离线)推送自定义推送声音,友盟、极光
    Swift3.0 自定义tableView复用cell 的写法,与CollectionViewCell的不同,数据model
  • 原文地址:https://www.cnblogs.com/PrettyTom/p/12367789.html
Copyright © 2011-2022 走看看