从源码中可以找到selenium 2.48.0支持的浏览器如下:

  [python] view plain copy

  1. Firefox
  2. Chrome
  3. ChromeOptions
  4. Ie
  5. Edge
  6. Opera
  7. Safari
  8. BlackBerry
  9. PhantomJS
  10. Android
  11. Remote
  12. DesiredCapabilities
  13. ActionChains
  14. TouchActions

一、安装与配置

 

以笔者用的Chrome为例:

1.安装selenium

命令行运行:

  1. pip install selenium

2.安装ChromeDriver 2.19
官网:https://sites.google.com/a/chromium.org/chromedriver/

下载:http://chromedriver.storage.googleapis.com/index.html (可能无法打开,请自备梯子,笔者正在使用这一款:ShadowSocks

若使用其他浏览器测试须另行下载对应的Driver。

下载后放到Chrome安装目录下,并把该目录添加到path环境变量。

也可以直接把chromedriver放到Python的根目录。总之它要放在Path变量的文件夹中。

二、基本用法

  1. from selenium import webdriver
  2. from selenium.webdriver.common.action_chains import ActionChains #ActionChains鼠标操作类
  3. from selenium.webdriver.common.keys import Keys #keys类操作
  4. # 打开浏览器:
  5. browser = webdriver.Chrome()
  6. # # 若未配置环境变量:
  7. # path = r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
  8. # browser = webdriver.Chrome(executable_path = path)
  9. # 在指定时间范围等待:
  10. browser.implicitly_wait(30)
  11. # 设置超时
  12. browser.set_page_load_timeout(30)
  13. browser.set_script_timeout(30)
  14. # 打开url:
  15. browser.get(r"http://www.你的网站.com")
  16. # 前进/后退
  17. browser.forward()
  18. browser.back()
  19. # 刷新
  20. browser.refresh()
  21. # 将浏览器最大化
  22. browser.maximize_window()
  23. # 将设置浏览器为宽480,高800显示'
  24. browser.set_window_size(480, 800)
  25. # 关闭浏览器
  26. browser.quit()
  27. # 关闭标签
  28. browser.close()
  29. '''''
  30. 获取浏览器窗口相关信息
  31. browser.title # 当前页面标题
  32. browser.name # 浏览器名
  33. browser.current_url # 返回当前页面url
  34. browser.window_handles # 返回当前浏览器的所有窗口
  35. browser.current_window_handle # 返回当前浏览器的窗口句柄
  36. '''
  37. # 跳转到其他标签页
  38. window = browser.window_handles
  39. browser.switch_to_window(window[1])
  40. # 选择窗口
  41. browser.switch_to_window('window_name')
  42. # 截取当前显示的页面并保存
  43. browser.get_screenshot_as_file(r'd:\backup\140591\桌面\首页图片\test.png')
  44. # 定位元素
  45. # 需要先分析源码
  46. text_username = browser.find_element_by_name('username')
  47. text_password = browser.find_element_by_name('password')
  48. form_login = browser.find_element_by_name('formlogin')
  49. # 也可以使用其他方法如xpath,注意转义符
  50. text_username = browser.find_element_by_xpath('//input[@name = \'username\']')
  51. '''''
  52. 所有相关方法:
  53. find_element(by='id', value=None)
  54. find_element_by_class_name(name)
  55. find_element_by_css_selector(css_selector)
  56. find_element_by_id(id)
  57. find_element_by_link_text(link_text)
  58. find_element_by_name(name)
  59. find_element_by_partial_link_text(link_text)
  60. find_element_by_tag_name(name)
  61. find_element_by_xpath(xpath)
  62. element后加s则返回一组对象
  63. '''
  64. #-----------------------WebElement相关-----------------------
  65. # 输入值
  66. # send_keys也可以用于上传文件:send_keys('d:/abc.txt')
  67. text_username.send_keys("你的用户名_错误")
  68. text_password.send_keys("你的密码")
  69. # 清空输入框,换成正确的用户名
  70. text_username.clear()
  71. text_username.send_keys("你的用户名_正确")
  72. # 提交表单
  73. form_login.submit()
  74. '''''
  75. 相关方法
  76. clear()  # 清除元素的内容
  77. send_keys()  # 在元素上模拟按键输入
  78. click()  # 单击元素
  79. submit()  # 提交表单
  80. size()  # 返回元素的尺寸
  81. text()  # 获取元素的文本
  82. get_attribute(name)  # 获得属性值
  83. is_displayed()  # 设置该元素是否用户可见
  84. '''
  85. #-------------------alert/confirm/prompt对话框处理-------------------
  86. '''''
  87. switch_to_alert()   # 用于获取网页上的警告信息。
  88. text   # 返回 alert/confirm/prompt 中的文字信息。
  89. accept()   # 点击确认按钮。
  90. dismiss()   # 点击取消按钮,如果有的话。
  91. send_keys()   # 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。
  92. '''
  93. #-----------------------下拉框处理-----------------------
  94. # 二次定位
  95. # driver.find_element_by_xx('xx').find_element_by_xx('xx').click()
  96. #先定位到下拉框
  97. m=driver.find_element_by_id("ShippingMethod")
  98. #再点击下拉框下的选项
  99. m.find_element_by_xpath("//option[@value='10.69']").click()
  100. #-----------------------cookie处理-----------------------
  101. '''''
  102. get_cookies()   # 获得所有cookie信息
  103. get_cookie(name)   # 返回特定name 有cookie信息
  104. add_cookie(cookie_dict)   # 添加cookie,必须有name 和value 值
  105. delete_cookie(name)   # 删除特定(部分)的cookie信息
  106. delete_all_cookies()   # 删除所有cookie信息
  107. '''
  108. #-----------------------文件上传-----------------------
  109. # 定位上传按钮,添加本地文件
  110. # driver.find_element_by_xx('xx').send_keys('d:/abc.txt')
  111. driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
  112. #-----------------------文件下载-----------------------
  113. fp = webdriver.FirefoxProfile()
  114. fp.set_preference("browser.download.folderList",2)
  115. fp.set_preference("browser.download.manager.showWhenStarting",False)
  116. fp.set_preference("browser.download.dir", os.getcwd())
  117. fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
  118. browser = webdriver.Firefox(firefox_profile=fp)
  119. browser.get("http://pypi.python.org/pypi/selenium")
  120. browser.find_element_by_partial_link_text("selenium-2").click()
  121. #-----------------------Keys类键盘操作-----------------------
  122. from selenium.webdriver.common.keys import Keys
  123. # element.send_keys(...),下同
  124. '''''
  125. send_keys(Keys.BACK_SPACE) # 返回键
  126. send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
  127. send_keys(Keys.SPACE)  空格键(Space)
  128. send_keys(Keys.TAB)  制表键(Tab)
  129. send_keys(Keys.ESCAPE)  回退键(Esc)
  130. send_keys(Keys.ENTER) 回车键(Enter)
  131. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
  132. send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
  133. send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
  134. send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
  135. '''
  136. # ----------------ActionChains类鼠标操作--------------------
  137. from selenium.webdriver.common.action_chains import ActionChains
  138. # 右键单击
  139. ActionChains(browser).context_click(text_username).perform()
  140. # 双击
  141. ActionChains(browser).double_click(text_username).perform()
  142. #执行元素的移动操作
  143. ActionChains(browser).drag_and_drop(text_username, text_password).perform()
  144. '''''
  145. ActionChains 类鼠标操作的常用方法:
  146. context_click()   # 右击
  147. double_click()   # 双击
  148. drag_and_drop()   # 拖动
  149. move_to_element()   # 鼠标悬停在一个元素上
  150. click_and_hold()   # 按下鼠标左键在一个元素上
  151. '''
  152. # -----------执行JavaScript脚本 --------------
  153. js="var q=document.getElementById(\"user_name\");q.style.border=\"1px solid red\";"
  154. #调用js
  155. browser.execute_script(js)
  156. # eg:
  157. # 将页面滚动条拖到底部
  158. js="var q=document.documentElement.scrollTop=10000"
  159. browser.execute_script(js)
  160. # 隐藏文字信息
  161. driver.execute_script('$("#tooltip").fadeOut();')
  162. # 隐藏按钮:
  163. button = driver.find_element_by_class_name('btn')
  164. driver.execute_script('$(arguments[0]).fadeOut()',button)

三、Demo

1. 用Chrome打开百度搜索关键字:Python

先分析一下百度首页的源码,Chrome中按F12打开控制台,用控制台左上角的放大镜图标找出输入框和提交按钮对应的代码。我们可以用id属性来获取这两个控件,如下图:

我们可以根据name、class、id等获取该控件。

完整代码如下:

  1. from selenium import webdriver
  2. from selenium.common.exceptions import NoSuchElementException
  3. import time
  4. # 打开浏览器:
  5. browser = webdriver.Chrome()
  6. browser.set_page_load_timeout(30)
  7. browser.set_script_timeout(30)
  8. # 在此时间范围内智能等待操作完成
  9. browser.implicitly_wait(30)
  10. # 每次点击链接后等待的秒数,用于观察操作效果
  11. wait_time = 5
  12. # 打开url:
  13. browser.get(r"http://www.baidu.com")
  14. time.sleep(wait_time)
  15. # 获取输入框和提交按钮
  16. search_input = browser.find_element_by_id("kw")
  17. search_submit = browser.find_element_by_id("su")
  18. # 输入Python
  19. search_input.send_keys("Python")
  20. # 点击「百度一下」按钮
  21. search_submit.click()
  22. time.sleep(wait_time)
  23. # 获取百度百科的链接
  24. target = browser.find_element_by_partial_link_text("Python_百度百科")
  25. target.click()
  26. # 关闭
  27. browser.quit()
 
3 脚本解析
# coding = utf-8
可加可不加,开发人员喜欢加一下,防止乱码嘛。
from selenium import webdriver
要想使用 selenium 的 webdriver 里的函数,首先把包导进来嘛
browser = webdriver.Firefox()
我们需要操控哪个浏览器呢?Firefox ,当然也可以换成 Ie 或 Chrome 。browser 可以
随便取,但后面要用它操纵各种函数执行。
browser.find_element_by_id("kw").send_keys("selenium")
一个控件有若干属性 id 、name、(也可以用其它方式定位),百度输入框的 id 叫 kw ,
我要在输入框里输入 selenium 。多自然语言呀!
browser.find_element_by_id("su").click()
搜索的按钮的 id 叫 su ,我需要点一下按钮( click() )。
browser.quit()
退出并关闭窗口的每一个相关的驱动程序,有洁癖用这个。
browser.close()
关闭当前窗口 ,用哪个看你的需求了。
 
#通过 id 方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过 name 方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过 tag name 方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过 class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
 
#通过 CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过 xphan 方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
############################################
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

【Python 】selenium 简介的更多相关文章

  1. 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础

    第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...

  2. python+selenium自动化软件测试(第1章):环境搭建,你也可以直接用Anaconda!

    1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试 ...

  3. Robot Framework和Selenium简介

    1.1  RF简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于 ...

  4. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  5. python+selenium 自动化测试实战

    一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...

  6. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  7. 自动化测试基础篇--Selenium简介

    摘自https://www.cnblogs.com/sanzangTst/p/7452636.html 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software Testing) ...

  8. 引用 自动化测试基础篇--Selenium简介

    原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...

  9. python+selenium环境配置及浏览器调用

    最近在学习python自动化,从项目角度和技术基础角度出发,我选择了python+selenium+appium的模式开始我的自动化测试之旅: 一.python安装 二.python IDE使用简介 ...

  10. 跟浩哥学自动化测试Selenium -- Selenium简介 (1)

    Selenium 简介 Selenium 是一款开源的web自动化测试工具,用来模拟对浏览器的操作(主要是对页面元素的操作),简单来讲,其实就是一个jar包.Selenium早期的版本比如1.0市场占 ...

随机推荐

  1. 【一天一道LeetCode】#29. Divide Two Integers

    一天一道LeetCode系列 (一)题目 Divide two integers without using multiplication, division and mod operator. If ...

  2. 在android C/C++ native编程(ndk)中使用logcat

    最近在研究Android 2.2 源代码的C/C++层,需要对代码进行一些调试,但是奇怪的是,直接添加LOGD("XXXXXXXX");,使用logcat却看不到任何输出,换成LO ...

  3. 如何编写51单片机超声波测距SR04_lcd1602显示程序

    超声波测距在我们日常生活中很常见,比如说车在倒退的时候,为了防止车撞到障碍物,会在车尾加上一个超声波测距模块.在智能车比赛中,也有超声波测距模块等等.可见超声波非常的重要,接下来,我们上代码研究一下如 ...

  4. oo第二次博客作业

    多线程协同与同步控制总结 第五次作业-多线程电梯 本次作业是我第一次接触多线程,建立了请求模拟器.调度器和电梯运行三种线程.请求模拟器负责在输入后识别有效请求:调度器在扫描有效请求后将新的请求加入请求 ...

  5. python socketserver框架解析

    socketserver框架是一个基本的socket服务器端框架, 使用了threading来处理多个客户端的连接, 使用seletor模块来处理高并发访问, 是值得一看的python 标准库的源码之 ...

  6. Spring Boot 多模块与 Maven 私有仓库

    前言 系统复杂了,抽离单一职责的模块几乎是必须的:若需维护多个项目,抽离公用包上传私有仓库管理也几乎是必须的.其优点无需赘述,以下将记录操作过程. 1. 多模块拆分 在.NET 中由于其统一性,实现上 ...

  7. 6.3 Query 语句对系统性能的影响

    我们重点分析实现同样功能的不同SQL 语句在性能方面会产生较大的差异的根本原因,并通过一个较为典型的示例来对我们的分析做出相应的验证. 为什么返回完全相同结果集的不同SQL 语句,在执行性能方面存在差 ...

  8. 新知识:JQuery语法基础与操作

     jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write ...

  9. NewLife.Net——开始网络编程

    网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests 一个服务端,就是监听一些端口,接收客户端连接和数据,进行处理,然后响应. /// ...

  10. Python HTTP库requests中文页面乱码解决方案!

    http://www.cnblogs.com/bitpeng/p/4748872.html Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的 ...