【Python 】selenium 简介
从源码中可以找到selenium 2.48.0支持的浏览器如下:
[python] view plain copy
- Firefox
- Chrome
- ChromeOptions
- Ie
- Edge
- Opera
- Safari
- BlackBerry
- PhantomJS
- Android
- Remote
- DesiredCapabilities
- ActionChains
- TouchActions
一、安装与配置
以笔者用的Chrome为例:
1.安装selenium
命令行运行:
- 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变量的文件夹中。
二、基本用法
- from selenium import webdriver
- from selenium.webdriver.common.action_chains import ActionChains #ActionChains鼠标操作类
- from selenium.webdriver.common.keys import Keys #keys类操作
- # 打开浏览器:
- browser = webdriver.Chrome()
- # # 若未配置环境变量:
- # path = r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
- # browser = webdriver.Chrome(executable_path = path)
- # 在指定时间范围等待:
- browser.implicitly_wait(30)
- # 设置超时
- browser.set_page_load_timeout(30)
- browser.set_script_timeout(30)
- # 打开url:
- browser.get(r"http://www.你的网站.com")
- # 前进/后退
- browser.forward()
- browser.back()
- # 刷新
- browser.refresh()
- # 将浏览器最大化
- browser.maximize_window()
- # 将设置浏览器为宽480,高800显示'
- browser.set_window_size(480, 800)
- # 关闭浏览器
- browser.quit()
- # 关闭标签
- browser.close()
- '''''
- 获取浏览器窗口相关信息
- browser.title # 当前页面标题
- browser.name # 浏览器名
- browser.current_url # 返回当前页面url
- browser.window_handles # 返回当前浏览器的所有窗口
- browser.current_window_handle # 返回当前浏览器的窗口句柄
- '''
- # 跳转到其他标签页
- window = browser.window_handles
- browser.switch_to_window(window[1])
- # 选择窗口
- browser.switch_to_window('window_name')
- # 截取当前显示的页面并保存
- browser.get_screenshot_as_file(r'd:\backup\140591\桌面\首页图片\test.png')
- # 定位元素
- # 需要先分析源码
- text_username = browser.find_element_by_name('username')
- text_password = browser.find_element_by_name('password')
- form_login = browser.find_element_by_name('formlogin')
- # 也可以使用其他方法如xpath,注意转义符
- text_username = browser.find_element_by_xpath('//input[@name = \'username\']')
- '''''
- 所有相关方法:
- find_element(by='id', value=None)
- find_element_by_class_name(name)
- find_element_by_css_selector(css_selector)
- find_element_by_id(id)
- find_element_by_link_text(link_text)
- find_element_by_name(name)
- find_element_by_partial_link_text(link_text)
- find_element_by_tag_name(name)
- find_element_by_xpath(xpath)
- element后加s则返回一组对象
- '''
- #-----------------------WebElement相关-----------------------
- # 输入值
- # send_keys也可以用于上传文件:send_keys('d:/abc.txt')
- text_username.send_keys("你的用户名_错误")
- text_password.send_keys("你的密码")
- # 清空输入框,换成正确的用户名
- text_username.clear()
- text_username.send_keys("你的用户名_正确")
- # 提交表单
- form_login.submit()
- '''''
- 相关方法
- clear() # 清除元素的内容
- send_keys() # 在元素上模拟按键输入
- click() # 单击元素
- submit() # 提交表单
- size() # 返回元素的尺寸
- text() # 获取元素的文本
- get_attribute(name) # 获得属性值
- is_displayed() # 设置该元素是否用户可见
- '''
- #-------------------alert/confirm/prompt对话框处理-------------------
- '''''
- switch_to_alert() # 用于获取网页上的警告信息。
- text # 返回 alert/confirm/prompt 中的文字信息。
- accept() # 点击确认按钮。
- dismiss() # 点击取消按钮,如果有的话。
- send_keys() # 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。
- '''
- #-----------------------下拉框处理-----------------------
- # 二次定位
- # driver.find_element_by_xx('xx').find_element_by_xx('xx').click()
- #先定位到下拉框
- m=driver.find_element_by_id("ShippingMethod")
- #再点击下拉框下的选项
- m.find_element_by_xpath("//option[@value='10.69']").click()
- #-----------------------cookie处理-----------------------
- '''''
- get_cookies() # 获得所有cookie信息
- get_cookie(name) # 返回特定name 有cookie信息
- add_cookie(cookie_dict) # 添加cookie,必须有name 和value 值
- delete_cookie(name) # 删除特定(部分)的cookie信息
- delete_all_cookies() # 删除所有cookie信息
- '''
- #-----------------------文件上传-----------------------
- # 定位上传按钮,添加本地文件
- # driver.find_element_by_xx('xx').send_keys('d:/abc.txt')
- driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
- #-----------------------文件下载-----------------------
- fp = webdriver.FirefoxProfile()
- fp.set_preference("browser.download.folderList",2)
- fp.set_preference("browser.download.manager.showWhenStarting",False)
- fp.set_preference("browser.download.dir", os.getcwd())
- fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
- browser = webdriver.Firefox(firefox_profile=fp)
- browser.get("http://pypi.python.org/pypi/selenium")
- browser.find_element_by_partial_link_text("selenium-2").click()
- #-----------------------Keys类键盘操作-----------------------
- from selenium.webdriver.common.keys import Keys
- # element.send_keys(...),下同
- '''''
- send_keys(Keys.BACK_SPACE) # 返回键
- send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
- send_keys(Keys.SPACE) 空格键(Space)
- send_keys(Keys.TAB) 制表键(Tab)
- send_keys(Keys.ESCAPE) 回退键(Esc)
- send_keys(Keys.ENTER) 回车键(Enter)
- send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
- send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
- send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
- send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
- '''
- # ----------------ActionChains类鼠标操作--------------------
- from selenium.webdriver.common.action_chains import ActionChains
- # 右键单击
- ActionChains(browser).context_click(text_username).perform()
- # 双击
- ActionChains(browser).double_click(text_username).perform()
- #执行元素的移动操作
- ActionChains(browser).drag_and_drop(text_username, text_password).perform()
- '''''
- ActionChains 类鼠标操作的常用方法:
- context_click() # 右击
- double_click() # 双击
- drag_and_drop() # 拖动
- move_to_element() # 鼠标悬停在一个元素上
- click_and_hold() # 按下鼠标左键在一个元素上
- '''
- # -----------执行JavaScript脚本 --------------
- js="var q=document.getElementById(\"user_name\");q.style.border=\"1px solid red\";"
- #调用js
- browser.execute_script(js)
- # eg:
- # 将页面滚动条拖到底部
- js="var q=document.documentElement.scrollTop=10000"
- browser.execute_script(js)
- # 隐藏文字信息
- driver.execute_script('$("#tooltip").fadeOut();')
- # 隐藏按钮:
- button = driver.find_element_by_class_name('btn')
- driver.execute_script('$(arguments[0]).fadeOut()',button)
三、Demo
1. 用Chrome打开百度搜索关键字:Python
先分析一下百度首页的源码,Chrome中按F12打开控制台,用控制台左上角的放大镜图标找出输入框和提交按钮对应的代码。我们可以用id属性来获取这两个控件,如下图:
我们可以根据name、class、id等获取该控件。
完整代码如下:
- from selenium import webdriver
- from selenium.common.exceptions import NoSuchElementException
- import time
- # 打开浏览器:
- browser = webdriver.Chrome()
- browser.set_page_load_timeout(30)
- browser.set_script_timeout(30)
- # 在此时间范围内智能等待操作完成
- browser.implicitly_wait(30)
- # 每次点击链接后等待的秒数,用于观察操作效果
- wait_time = 5
- # 打开url:
- browser.get(r"http://www.baidu.com")
- time.sleep(wait_time)
- # 获取输入框和提交按钮
- search_input = browser.find_element_by_id("kw")
- search_submit = browser.find_element_by_id("su")
- # 输入Python
- search_input.send_keys("Python")
- # 点击「百度一下」按钮
- search_submit.click()
- time.sleep(wait_time)
- # 获取百度百科的链接
- target = browser.find_element_by_partial_link_text("Python_百度百科")
- target.click()
- # 关闭
- browser.quit()
【Python 】selenium 简介的更多相关文章
- 《零成本实现Web自动化测试--基于Selenium》第二章 Selenium简介和基础
第一部分 Selenium简介 1.Selenium 组建 1.1 Selenium-IDE Selenium-IDC是开发Selenium测试案例的集成开发环境.它像FireFox插件一样的工作,支 ...
- python+selenium自动化软件测试(第1章):环境搭建,你也可以直接用Anaconda!
1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试 ...
- Robot Framework和Selenium简介
1.1 RF简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- python+selenium 自动化测试实战
一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...
- web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架
基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架 by:授客 QQ:1033553122 博客:http://blog.sina.com.cn/ishou ...
- 自动化测试基础篇--Selenium简介
摘自https://www.cnblogs.com/sanzangTst/p/7452636.html 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software Testing) ...
- 引用 自动化测试基础篇--Selenium简介
原文链接:http://www.cnblogs.com/sanzangTst/p/7452636.html 鸣谢参藏法师 一.软件开发的一般流程 二.什么叫软件测试? 软件测试(英语:Software ...
- python+selenium环境配置及浏览器调用
最近在学习python自动化,从项目角度和技术基础角度出发,我选择了python+selenium+appium的模式开始我的自动化测试之旅: 一.python安装 二.python IDE使用简介 ...
- 跟浩哥学自动化测试Selenium -- Selenium简介 (1)
Selenium 简介 Selenium 是一款开源的web自动化测试工具,用来模拟对浏览器的操作(主要是对页面元素的操作),简单来讲,其实就是一个jar包.Selenium早期的版本比如1.0市场占 ...
随机推荐
- 【一天一道LeetCode】#29. Divide Two Integers
一天一道LeetCode系列 (一)题目 Divide two integers without using multiplication, division and mod operator. If ...
- 在android C/C++ native编程(ndk)中使用logcat
最近在研究Android 2.2 源代码的C/C++层,需要对代码进行一些调试,但是奇怪的是,直接添加LOGD("XXXXXXXX");,使用logcat却看不到任何输出,换成LO ...
- 如何编写51单片机超声波测距SR04_lcd1602显示程序
超声波测距在我们日常生活中很常见,比如说车在倒退的时候,为了防止车撞到障碍物,会在车尾加上一个超声波测距模块.在智能车比赛中,也有超声波测距模块等等.可见超声波非常的重要,接下来,我们上代码研究一下如 ...
- oo第二次博客作业
多线程协同与同步控制总结 第五次作业-多线程电梯 本次作业是我第一次接触多线程,建立了请求模拟器.调度器和电梯运行三种线程.请求模拟器负责在输入后识别有效请求:调度器在扫描有效请求后将新的请求加入请求 ...
- python socketserver框架解析
socketserver框架是一个基本的socket服务器端框架, 使用了threading来处理多个客户端的连接, 使用seletor模块来处理高并发访问, 是值得一看的python 标准库的源码之 ...
- Spring Boot 多模块与 Maven 私有仓库
前言 系统复杂了,抽离单一职责的模块几乎是必须的:若需维护多个项目,抽离公用包上传私有仓库管理也几乎是必须的.其优点无需赘述,以下将记录操作过程. 1. 多模块拆分 在.NET 中由于其统一性,实现上 ...
- 6.3 Query 语句对系统性能的影响
我们重点分析实现同样功能的不同SQL 语句在性能方面会产生较大的差异的根本原因,并通过一个较为典型的示例来对我们的分析做出相应的验证. 为什么返回完全相同结果集的不同SQL 语句,在执行性能方面存在差 ...
- 新知识:JQuery语法基础与操作
jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是"write ...
- NewLife.Net——开始网络编程
网络编程的重要性就不说了,先上源码:https://github.com/nnhy/NewLife.Net.Tests 一个服务端,就是监听一些端口,接收客户端连接和数据,进行处理,然后响应. /// ...
- Python HTTP库requests中文页面乱码解决方案!
http://www.cnblogs.com/bitpeng/p/4748872.html Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的 ...