温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Selenium2相关知识最全总结

发布时间:2020-08-26 14:07:10 来源:网络 阅读:532 作者:o凤舞九天o 栏目:软件技术

1. 定位元素的几种方法

    find_element_by_id(优先,常用),对应的是id属性

    find_element_by_name(优先,常用),对应的是name属性

    find_element_by_class_name,对应的是class属性的值

    find_element_by_tag_name,对应的是标签名称,如input,p,span,title,body....

    find_element_by_link_text,对应的是超链接的文本内容

    find_element_by_partial_link_text,对应的是部分超链接的文本内容

    find_element_by_xpath,对应的是元素的path,可通过firebug工具获得

    find_element_by_css_selector,通过css属性定位,class用.  id用#,

         示例:

             driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")

             driver.find_element_by_css_selector("#su").click()


2.By定位

    find_element(By.ID,"kw")

    find_element(By.NAME,"wd")

    find_element(By.CLASS_NAME,"s_ipt")

    find_element(By.TAG_NAME,"input")

    find_element(By.LINK_TEXT,u"新闻")

    find_element(By.PARTIAL_LINK_TEXT,u"新")

    find_element(By.XPATH,"//*[@class='bg s_btn']")

    find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su") 


3.几种浏览器操作

    说明:操作浏览器需要将浏览器插件目录放入环境变量中,不然找不到

    from selenium import webdriver

    driver = webdriver.Ie()        --IE浏览器,插件名为   IEDriverServer.exe

    driver = webdriver.Firefox()   -- 火狐浏览器,插件名为  geckodriver.exe

    driver = webdriver.Chrome()  -- 谷歌浏览器,插件名为  chromedriver.exe

    driver = webdriver.Edge()      --Edge浏览器(windows10系统自带), 无需插件

    操作360浏览器:

       360浏览器内核基于chrome浏览器,因此插件用的也是chromedriver.exe,不过得配置下

        chrome_options = webdriver.ChromeOptions()

        chrome_options.binary_location = r"C:\Users\kevin\AppData\Roaming\360se6\Application\360se.exe" #这里是360安全浏览器的路径

        chrome_options.add_argument(r'--lang=zh-CN') # 这里添加一些启动的参数

        d = webdriver.Chrome(chrome_options=chrome_options)

   

4.控制浏览器

   设置宽高:driver.set_window_size(400,500),  ------设置宽400,高500

   设置全屏:driver.maximize_windows()

   前进:driver.forward()

   后退:  driver.back()

   刷新当前页面:driver.refresh()

   

5.定位到的元素操作

   driver.find_element_by_xx('xx').click()              --点击操作

   driver.find_element_by_xx('xx').clear()             --清除操作,清除文本框中的内容

   driver.find_element_by_xx('xx').send_keys('123')     --输入数据到文本框

   driver.find_element_by_xx('xx').submit()         --提交操作,相当于回车,如在搜索框中输入内容后,执行此方法,可直接执行搜索动作

   driver.find_element_by_xx('xx').size()              --获取元素的尺寸

   driver.find_element_by_xx('xx').text                --获取元素的文本

   driver.find_element_by_xx('xx').get_attribute('id')   --获取id属性,只要是属性都可通过此方法获取,如name,id,type,class.

   driver.find_element_by_xx('xx').is_displayed()    --获取元素是否可见,可见返回True,否则False

   

6.鼠标事件

   Actions类中提供了鼠标操作的常用方法

   perform()                               --执行所有Actions类中存储的行为

   context_click()                       --右击

   double_click()                        --双击

   drap_and_drop()                   --拖动

   move_to_element                 --悬停


  调用示例:

     context_click()       

from selenium.webdriver.common.action_chains ActionChains

driver = webdriver.Ie()
right_click = driver.find_element_by_id()
ActionChains(driver).context_click(right_click).perform()

    其他的方法调用同上,只是改下方法而已


7.键盘操作

   模拟组合键 CTRL+A,CTRL+C等等

   from selenium.webdriver.common.keys import Keys

   退格键 Keys.BACK_SPACE             ---  driver.find_elemennt_by_id('').send_keys(Keys.BACK_SPACE)

   空格键Keys.SPACE                        ---  driver.find_elemennt_by_id('').send_keys(Keys.SPACE)

   输入CTRL+A                                 ---  driver.find_elemennt_by_id('').send_keys(Keys.CONTROL,'a')

   回车键                                           ---  driver.find_elemennt_by_id('').send_keys(Keys.ENTER)


8.设置元素等待

   显式等待:

            一直检测并等待某个元素出现或消失,达到最大时长条件还未成立则抛出超时异常

           from selenium import webdriver

           from selenium.webdriver.support.ui import WebDriverWait

           from selenium.webdriver.support import expected_conditions as EC

           driver = webdriver.Ie()
           driver.get("https://www.baidu.com")

            element = WebDriverWait(driver,5,0.5).until(

                              EC.presence_of_ element_located((By.id,"kw"))     

               )

           element.send_keys('hello')

           5:表示最长等待时间

           0.5:检测间隔时间,也就是隔多长时间检测一次,单位秒

           until:直到括号中条件成立,也存在until not

    隐式等待:

            driver.implicitly_wait(10),单位为秒,不设置默认为0,一般写在用例开头,针对整条用例有效,在定位一个元素时,如果元素未加载出来,则定位不到。此方              法会在设定时间内一直检测,检测到了就向下进行,否则就抛出超时异常

    sleep休眠:

             强制等待一段时间

             import time

             time.sleep(10)


9.定位一组元素

   find_elements_by_xx,同定位单个元素一样,不过element是elements

   示例:勾选全部checkbox

    checkboxs = driver.find_elements_by_tag_name("input")

    for checkbox in checkboxs:

          if checkbox.get_attribute("type") == "checkbox":

              checkbox.click() 


10.操作下拉选择框

   方法:

      选择:

           select_by_index()   --通过索引

           select_by_value()   --通过value值

           select_by_visiable_text()  --通过显示的文本

      反选:

           deselect_by_index()   --通过索引

           deselect_by_value()   --通过value值

           deselect_by_visiable_text()  --通过显示的文本

           deselect_all()              --取消选择所有

     示例:

                  <select id="sid">

                                  <option></option>

                                  <option value="o1" id="id1">显示文本1</option>

                                  <option value="o2" id="id2">显示文本2</option>

                                  <option value="o3" id="id3">显示文本3</option>

                   </select>

                   

                   选择示例:

                        select_by_index(1)   --通过索引

                        select_by_value('o2' )   --通过value值

                        select_by_visiable_text('显示文本2')  --通过显示的文本

                        

                  完整示例:

                  from selenium.webdriver.support.ui import Select

                  select = Select(driver.find_element_by_id("sid"))

                  select.select_by_index(1)

                  

11. 多表单切换

      

      许多页面存在表单嵌套情况,从一个表单是无法直接定位到其他表单中元素的,需要进行表单切换

      f = driver.find_element_by_id("fr")   --定位到id为fr的表单,定位方法通用 

      driver.switch_to.frame(f)     ---切换到id为fr的表单中

      操作完成后跳到最外层表单: driver.switch_to.default_content()

      

12.多窗口切换

      获取当前窗口的handle:   current_handle = driver.current_window_handle

      获取所有窗口handle:    handles = driver.window_handles

      切换到其他窗口

      for hand in handles:

             if hand != current_handle:

                 driver.swith_to.window(hand)           --切换窗口

                 

13.弹窗处理

      针对alert,prompt,confirm出现的弹窗,可使用driver.switch_to_alert()进行捕获并处理

      方法:

           text                            --返回弹窗的文本信息

           accept(),                   --接受弹窗,也就是点击确定

           dismiss()                  --取消弹窗

                  

      调用示例:

             driver.switch_to_alert().accept()          --点击确定

             

14.上传文件

      方法一:直接通过send_keys()方法输入文件路径到文本框中,点击提交按钮

      方法二:通过AutoIt工具,将操作过程打包成exe文件,然后通过python进行调用

      

15.操作cookie

     获取所有cookie:                          driver.get_cookies()

     获取名为xx的cookie:                   driver.get_cookie('xx')

     添加cookie:                                 driver.add_cookie(dict)    -- 参数为字典对象

     删除所有cookie:                          driver.delete_all_cookies()

     

16.调用JavaScript

      js = "window.scrollTo(100,450);"

      driver.execute_script(js)

      

17.处理HTM5视频播放

     示例:

         video = driver.find_element_by_xpath("body/Section[1]/div/video")

         driver.execute_script("return arguments[0].play()",video)                          --播放

         driver.execute_script("return arguments[0].pause()",video)                       --暂停

          


18.窗口截图


      driver.get_screenshot_as_file("D:\xxx\xx.png")


19.关闭窗口


    driver.close()  ---关闭当前窗口

    driver.quit()    ---关闭所有窗口


20.验证码处理

     1.去掉验证码

     2.设置万能验证码

     3.使用cookie

     4.验证码识别

     5.验证码存放在cookie中   


21.操作已经打开的浏览器,下面以chrome为例

    1.手动启动浏览器,以debug模式启动

      C:\Program Files (x86)>chrome.exe --remote-debugging-port=9222

    2.添加selenium配置

      options = webdriver.ChromeOptions()

      options.debugger_address(options)

      driver = webdriver.Chrome(options)

      剩下的按照之前正常操作就可以了

     




遇到的问题及解决方法:

1.报如下错误

selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missing 'value'

  (Session info: chrome=75.0.3770.142)

  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64)

   解决方案:

    这是由于chromedriver和chrome浏览器版本不匹配导致的,匹配信息如下:

    

chromedriver版本支持的Chrome版本
v2.41v67-69
v2.40v66-68
v2.39v66-68
v2.38v65-67
v2.37v64-66
v2.36v63-65
v2.35v62-64
v2.34v61-63
v2.33v60-62
v2.32v59-61
v2.31v58-60
v2.30v58-60
v2.29v56-58
v2.28v55-57
v2.27v54-56
v2.26v53-55
v2.25v53-55
v2.24v52-54
v2.23v51-53
v2.22v49-52
v2.21v46-50
v2.20v43-48
v2.19v43-47
v2.18v43-46
v2.17v42-43
v2.13v42-45
v2.15v40-43
v2.14v39-42
v2.13v38-41
v2.12v36-40
v2.11v36-40
v2.10v33-36
v2.9v31-34
v2.8v30-33
v2.7v30-33
v2.6v29-32
v2.5v29-32
v2.4v29-32

     下载地址:http://npm.taobao.org/mirrors/chromedriver/

                     http://chromedriver.storage.googleapis.com/index.html

     如果chrome版本太高,建议使用IE浏览器代替

 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI