# 简介

Selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏 。

chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:

Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads Firefox:https://github.com/mozilla/geckodriver/releases Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/ 安装配置chromedriver:https://blog.csdn.net/weixin_43901998/article/details/88087832

# 安装

pip install selenium

# 入门

# 与浏览器建立连接

	#1.加载网页
	from selenium import webdriver
	driver = webdriver.PhantomJS(executable_path=r'"安装目录") # 也可以把chrome添加到python文件路径下,就不用写executable_path=r'"安装目录"
								 
	driver.get("https://www.baidu.com") # 请求
	driver.save_screenshot("baidu.png") # 截图

	#2.退出
	driver.quit() 
1
2
3
4
5
6
7
8
9

# selenium快速入门

	from selenium import webdriver

	#实例化浏览器
	driver = webdriver.Chrome()

	#发送请求
	driver.get('https://www.baidu.com')

	#截图   
	driver.save_screenshot("baidu.png")    
							  
	#最大化窗口
	driver.maximize_window()
							  
	#退出浏览器
	driver.quit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 元素定位

  • find_element_by_id:根据id来查找某个元素
submitTag = driver.find_element_by_id('su')
submitTag1 = driver.find_element(By.ID,'su')
1
2
  • find_element_by_class_name:根据类名查找元素
submitTag = driver.find_element_by_class_name('su')
submitTag1 = driver.find_element(By.CLASS_NAME,'su')
1
2
  • find_element_by_name:根据name属性的值来查找元素
submitTag = driver.find_element_by_name('email')
submitTag1 = driver.find_element(By.NAME,'email')
1
2
  • find_element_by_tag_name:根据标签名来查找元素
submitTag = driver.find_element_by_tag_name('div')
submitTag1 = driver.find_element(By.TAG_NAME,'div')
1
2
  • find_element_by_xpath:根据xpath语法来获取元素
submitTag = driver.find_element_by_xpath('//div')
submitTag1 = driver.find_element(By.XPATH,'//div')
1
2

提示

要注意,find_element是获取第一个满足条件的元素。find_elements是获取所有满足条件的元素

# 浏览器操作

	from selenium import webdriver

	#实例化浏览器
	c = webdriver.Chrome()

	#发送请求
	c.get('https://www.baidu.com')
1
2
3
4
5
6
7

# 获取本页面URL

c.current_url
1

# 获取日志

c.log_types  #获取当前日志类型
c.get_log('browser')#浏览器操作日志
c.get_log('driver') #设备日志
c.get_log('client') #客户端日志
c.get_log('server') #服务端日志

##3.窗口操作
c.maximize_window()#最大化
c.fullscreen_window() #全屏
c.minimize_window() #最小化
c.get_window_position() #获取窗口的坐标
c.get_window_rect()#获取窗口的大小和坐标
c.get_window_size()#获取窗口的大小
c.set_window_position(100,200)#设置窗口的坐标
c.set_window_rect(100,200,32,50)    #设置窗口的大小和坐标
c.set_window_size(400,600)#设置窗口的大小
c.current_window_handle   #返回当前窗口的句柄
c.window_handles         #返回当前会话中的所有窗口的句柄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 设置延迟

c.set_script_timeout(5) #设置脚本延时五秒后执行
c.set_page_load_timeout(5)#设置页面读取时间延时五秒
1
2

# 关闭

c.close() #关闭当前标签页
c.quit() #关闭浏览器并关闭驱动
1
2

# 打印网页源码

c.page_source
1

# 屏幕截图操作

c.save_screenshot('1.png')#截图,只支持PNG格式
c.get_screenshot_as_png() #获取当前窗口的截图作为二进制数据
c.get_screenshot_as_base64() #获取当前窗口的截图作为base64编码的字符串

8.前进后退刷新
c.forward() #前进
c.back()  #后退
c.refresh()#刷新
1
2
3
4
5
6
7
8

# Cookies操作

c.get_cookie('BAIDUID') #获取指定键的Cookies
c.get_cookies()         #获取所有的Cookies
for y in c.get_cookies():
   x=y
   if x.get('expiry'):
       x.pop('expiry')     
   c.add_cookie(x) #添加Cookies  
c.delete_cookie('BAIDUID') #删除指定键的Cookies内容
c.delete_all_cookies() #删除所有cookies
1
2
3
4
5
6
7
8
9

# 操作表单元素

操作输入框:分为两步。

第一步:找到这个元素。

第二步:使用send_keys(value),将数据填充进去

使用clear方法可以清除输入框中的内容

inputTag.clear()
1

# 操作checkbox

因为要选中checkbox标签,在网页中是通过鼠标点击的。因此想要选中checkbox标签,那么先选中这个标签,然后执行click事件

rememberTag = driver.find_element_by_name("rememberMe")
rememberTag.click()
1
2

# 操作按钮

操作按钮有很多种方式。比如单击、右击、双击等。这里讲一个最常用的。就是点击。直接调用click函数就可以了

inputTag = driver.find_element_by_id('su')
inputTag.click()
1
2

# 选择select

select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专门为select标签提供了一个类selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使用这个对象进行选择了[1]。

# 切换iframe

我们知道网页中有一种节点叫作 iframe,也就是子 Frame,相当于页面的子页面,它的结构和外部网页的结构完全一致。Selenium打开页面后,默认是在父级 Frame 里面操作,而此时如果页面中还有子 Frame,Selenium是不能获取到子 Frame 里面的节点的。这时就需要使用 switch_to.frame 方法来切换 Frame。