Selenium一些概念
- Selenium官方有一个很经典的回答:“自动化操作的浏览器,就是这样……做你想要做的事情,一切取决于你。”
- Selenium项目最早是为测试浏览器、网页而诞生的。在大数据时代,Selenium广泛应用于网络爬虫。需要注意的是,Selenium项目并不是单个特定的软件,而是由多个工具组成,每个工具具有特定的功能。
- Selenium WebDriver是Selenium项目基于浏览器的一部分,也是我们主要使用的一部分。它的灵活性很强,几乎支持所有主流的浏览器(甚至包括一些很小众的浏览器),并且可以完美地在支持这些浏览器的操作系统上运行。换句话说,当使用Selenium的时候,你完全不必担心兼容性问题,可以放心地进行代码移植。
- SeleniumWebDriver支持的浏览器主要包括:
●Firefox浏览器;
●Chrome浏览器;
●Opera浏览器;
●Edge浏览器;
●IE浏览器。 - SeleniumWebDriver支持的操作系统主要包括:
●Windows;
●Linux;
●macOS(含iOS);
●Android。 - Selenium还支持多种编程语言(如Java、R、Python、PHP 、Ruby、Perl、Haskell、Objective-C、C#等)。
- 行的Selnium主要分为两个部分—— Selenium WebDriver和Selenium IDE。前者主要用来创建基于浏览器的回归自动化套件和测试,后者主要用来创建快速的bug重现脚本,以帮助用户进行自动化辅助的探索性测试。具体的Selenium项目的工具分支如图
页面导航
启动浏览器
-
在启动浏览器之前,需要下载一个WebDriver。那么什么是WebDriver呢?假设我们需要找个猎人陪我们一起上山打猎,目前我们已经找到了需要的猎人,但是还缺一把猎枪,WebDriver就是这把猎枪,它就是驱动浏览器运行的一个工具。
-
下载webdriver后,直接放入python的安装目录下就行,下载地址可以去自己度娘一下,我的下载完放入的路径截图:
注意:我的是使用了anaconda了,所以是这个路径,正常你要是安装的python,去python安装路径下就行了,红框中的一个是给google浏览器,一个是给firefox浏览器的,一定要将webdriver的版本和你当前的浏览器版本对应上,否则做测试时,会出现调不起来浏览器等问题。 -
使用Python编写代码。看看能不能启动浏览器。
# 导入Selenium库
from selenium import webdriver
# 启动google浏览器
googleDriver = webdriver.Chrome()
执行结果:
打开页面
# 导入Selenium库
from selenium import webdriver
# 启动google浏览器
googleDriver = webdriver.Chrome()
# 打开百度页面
googleDriver.get("https://baidu.com")
执行结果
温馨提示:
如果需要设置打开浏览器的窗口大小可以在上述代码中,加入如下代码
# 设置打开的浏览器窗口的长和宽
googleDriver.set_window_size(800, 480)
设置打开的浏览器窗口最大化
# 设置打开的浏览器窗口最大化
googleDriver.maximize_window()
浏览器基本操作
代码如下,执行结果自己操作看看。。
# 导入Selenium库
from selenium import webdriver
import time
# 启动google浏览器
googleDriver = webdriver.Chrome()
# 打开百度页面
googleDriver.get("https://baidu.com")
# 休眠(停留)2秒后打开百度新闻
time.sleep(2)
googleDriver.get("https://news.baidu.com")
# 休眠(停留)2秒后后退
time.sleep(2)
googleDriver.back()
# 休眠(停留)2秒后前进
time.sleep(2)
googleDriver.forward()
# 休眠(停留)2秒后刷新
time.sleep(2)
googleDriver.refresh()
# 休眠(停留)2秒后关闭浏览器
time.sleep(2)
googleDriver.quit()
拖动窗口
在实际工作中可能会碰到这种情况,即我们打开了一个页面,但是这个页面比较长,我们需要拖动浏览器的滚动条到底部,然后才能跳转到下一步页面。由于Selenium库中没有与调用滚动条相关的命令,因此这里使用JavaScript来模拟操作。为了使用JavaScript,Selenium为我们提供了下面这条代码。
演示一下它的具体的使用方法
# 导入Selenium库
from selenium import webdriver
import time
# 启动浏览器,并打开Python官网
driver = webdriver.Chrome()
driver.get("https://python.org")
# 休眠(停留)5秒
time.sleep(10)
# 执行JavaScrpt代码
JS = "window.scrollTo(10000,document.body.scrollHeight)"
driver.execute_script(JS)
# 休眠(停留)2秒后退出
time.sleep(2)
driver.quit()
另外这段代码还不太了解,先打个问号?
对于某些版本的Chrome浏览器来说,这种方法并不能用,所以我们不得不采用寻找元素的方式来使页面下滑,如下。
cookie的调用
对于cookie的调用方式,Selenium项目提供了成熟的解决方案。下面是一些常用的cookie调用函数。
●get_cookies():获得所有cookie信息。
●delete_all_cookies():删除所有cookie信息。
●get_cookie([name]):返回字典的key为[name]的cookie。●add_cookie(cookie_dict):添加cookie。cookie_dict指字典对象,且必须有name和value两个值。
●delete_cookie([name],[optionsString]):删除cookie信息。第一个参数[name]是要删除的cookie的名称。第二个参数[optionsString]是cookie选项,目前支持的选项有“路径”和“域”。
举例:
# -*-coding:utf-8-*-
# @Author: Songzq
# @Time: 2020年08月06日13时
# 说明:
# 导入selenium、time、ActionChains库
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
# 启动浏览器并打开百度页面
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
# 通过查找元素实现搜索
driver.find_element_by_id('kw').send_keys("selenium")
driver.find_element_by_id('su').click()
# 获取cookie
cookies =driver.get_cookies()
# 返回字典的key为BAIDUID的cookie
cookie = driver.get_cookie('BAIDUID')
print(cookies)
print(cookie)
# 删除所有cookie信息
driver.delete_all_cookies()
# 退出
driver.quit()
driver = webdriver.Chrome()
driver.get("http://youdao.com")
# 向cookie的name和value中添加会话信息
driver.add_cookie({"name":"testname_1234567890", "value":"testvalue_12345"})
time.sleep(4)
cookies1=driver.get_cookies()
print(cookies1)
# 退出
driver.quit()
使用多个窗口
在使用自动化测试工具的过程中,我们不得不面对需要打开一个新的窗口但当前的窗口暂时还不能关闭的情况。就像我们浏览网页的时候,总是希望多打开页面,到最后,地址栏下方可能会有十几个标签。
作为一个功能齐全的自动化测试工具,Selenium虽然自身并不提供使用多个窗口这一功能,但是我们可以换一种思路来解决这个问题—— 使用JavaScript代码。
# -*-coding:utf-8-*-
# @Author: Songzq
# @Time: 2020年08月06日13时
# 说明:
from selenium import webdriver
import time
# 打开浏览器,最大化窗口
driver=webdriver.Chrome()
driver.maximize_window()
# 打开百度页面
driver.get("https://www.baidu.com/")
# 停留2秒后打开搜狗搜索网页
time.sleep(2)
JS1 = "window.open('https://www.sogou.com');"
driver.execute_script(JS1)
# 停留2秒后打开有道翻译网页
time.sleep(2)
JS2 = "window.open('https://fanyi.youdao.com/');"
driver.execute_script(JS2)
time.sleep(5)
# 退出
driver.quit()