selenium基础知识点总结

  1. selenium介绍

(1)、selenium是一个网页自动化测试的工具,使用它可以操作浏览器来模拟人的行为。

(2)、selenium在爬虫中的应用:
①获取动态的网页数据,一些动态的数据在网页的源代码中并没有显示,这时候可以考虑用selenium获取。
②用于模拟登陆,对于一些需要登陆才能获取到数据的网页,一般如果采用分析参数破解的话,需要耗费大量的时间和精力进行网站的登陆的破解,而如果使用selenium的话,就可以完全模拟人的登陆行为来进行网站登陆。就不需要分析参数进行网站的破解。

(3)、selenium的特点
①它是通过驱动浏览器来进行网页的登陆,或者是获取网页的信息。
②由于selenium是驱动浏览器进行数据的爬取,而浏览器的打开,对网页发起请求,渲染页面都需要耗费大量的时间。所以一般不使用selenium进行网站数据的爬取,除非无法通过分析请求的方式进行网站登陆,或者网站是动态网站,页面源代码中获取不到数据的这种情况下,才考虑使用selenium来进行爬取。
③selenium提供的一些元素定位和查找的方法都是用纯Python实现的,效率比较低。
④selenium是免费开源的,支持很多的主流浏览器,IE,Chrome,Opera,FireFox,Safari等

  1. selenium使用

    2.1、selenium键盘操作

    2.2、selenium浏览器操作

    2.3、selenium鼠标操作

    2.4、selenium元素定位

    2.5、selenium获取标签属性值和文本

    2.6、selenium操作cookie

    2.7、selenium操作滚动条

    2.8、selenium显性等待和隐性等待

    2.9、selenium文件上传

2、selenium使用

from selenium.webdriver.common.action_chains import ActionChains

ActionChains类,需要一个参数:浏览器对象。当调用相关鼠标操做函数的时候,这些事情并不会立刻执行。

action=ActionChains(browser)
action.perform()

而是将所有的鼠标事件都放入到了一个队列当中,只有执行perform函数的时候,所有的鼠标事件才会被执行

2.1、selenium键盘操作
(1)、基本操作
	①send_keys():输入字符串。
	②clear():清空文本框。

selenium 提供了比较完整的键盘操作,在使用的模拟键盘操作之前需要我们导入from
selenium.webdriver.common.keys import Keys即可,然后就可以来模拟键盘操作。

(2)、进阶操作
		from selenium.webdriver.common.keys import Keys
    		①send_keys(Keys.CONTROL,'a')     #全选crtl+a
    		②send_keys(Keys.CONTROL,'c')     #复制crtl+c
    		③send_keys(Keys.CONTROL,'v')     #粘贴crtl+v
    		④send_keys(Keys.CONTROL,'x')     #剪切crtl+x
    		⑤send_keys(Keys.ENTER)           #回车键enter
    		⑥send_keys(Keys.SPACE)           #空格键Space
    		⑦send_keys(Keys.BACK_SPACE)      #退格键BACKSPACE
    		⑧send_keys(Keys.TAB)			 #制表键Tab
    		⑨send_keys(Keys.F1)			  	 #键盘 F1
    		⑩send_keys(Keys.ESCAPE)          #退出键Esc
    		#其他键写法大致同上
2.2、selenium浏览器操作
(1)、基本操作
	①maximize_window()			#浏览器窗口最大化
	②minimize_window()			#浏览器窗口最小化
	③set_window_size()			#自定义浏览器窗口(第一个参数宽,第二个参数高)
	例:   set_window_size(480,500)   #定义一个480x500的窗口
	④back()                    #浏览器后退
	⑤forward()				    #浏览器前进
	⑥refresh()					#浏览器刷新页面
	⑦current_window_handle		#浏览器当前选项卡
	⑧window_handle				#浏览器打开的所有选项卡
	⑨switch_to.window			#切换浏览器窗口
	⑩close() 					#关闭当前浏览器窗口
	①quit()						#退出浏览器
2.3、selenium鼠标操作
(1)、基本操作
  2.3.1、鼠标点击事件
	①click()					#单击鼠标左键
	②double_click()				#双击鼠标左键
	③context_click()			#单击鼠标右键
	④click_and_hold() 			#点击鼠标左键不松开
	⑤release()					#松开鼠标左键
  
  2.3.2、鼠标移动事件
	①move_to_element()			#鼠标移动至某个元素
	②move_by_offset(x,y)		#鼠标移动到某个坐标
	③move_to_element_with_offset(element,x,y)   #移动到距离某个元素(多少距离)的位置
  
  2.3.3、鼠标拖拽事件
	①drag_and_drop()							#鼠标拖拽到某个元素松开
	②drag_and_drop_by_offset(sourse,x,y)		#拖拽到距离某个坐标点多少的位置后松开
2.4、selenium元素定位
(1)、基本操作
  2.4.1、定位单个节点
	①find_element_by_id()					#通过id属性匹配
	②find_element_by_class()				#通过class属性匹配
	③find_element_by_name()					#通过name值匹配
	④find_element_by_tag_name()				#通过标签名匹配
	⑤find_element_by_css()					#通过css选择器匹配
	⑥find_element_by_xpath()				#通过xpath语法匹配
	⑦find_element_by_link_text()			#通过文本链接匹配
	⑧find_element_by_partial_link_text()	#通过部分文本链接匹配
	⑨#自定义策略定位
	from selenium.webdriver.common.by import By
	find_element(By.ID,"kw")				#可通过BY.设置定位策略
	
  2.4.2、定位多个节点
	①find_elements_by_id()					#通过id属性匹配
	②find_elements_by_class()				#通过class属性匹配
	③find_elements_by_name()				#通过name值匹配
	④find_elements_by_tag_name()			#通过标签名匹配
	⑤find_elements_by_css()					#通过css选择器匹配
	⑥find_elements_by_xpath()				#通过xpath语法匹配
	⑦find_elements_by_link_text()			#通过文本链接匹配
	⑧find_elements_by_partial_link_text()	#通过部分文本链接匹配
	⑨自定义策略定位
	from selenium.webdriver.common.by import By
	find_elements(By.ID,"kw")				#可通过BY.设置定位策略
2.5、selenium获取标签属性值和文本
(1)、基本操作
	①get_attribute()						#获取属性值
		例:browser=webdriver.Chrome()
			browser.find_element_by_name('tj_trnews').get_attribute('href')
	②text									#获取文本
		例:browser.find_element_by_name('tj_trnews').text
2.6、selenium操作cookie
(1)、基本操作
	①get_cookies()				#获得所有cookie信息
	②add_cookie(cookie_dict)	#添加cookie,cookie_dict指字典对象
		例:driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
	③delete_cookie(name)		#删除cookie,name是指要删除的cookie名称
	④delete_all_cookies()		#删除所有cookie信息

(2)、进阶操作
	获取cookie并转换成网页上cooki形式
	网页上的cookie形式:
	Cookie: uuid_tt_dd=10_31114832050-1534835249345-170819; smidV2=20180821192529d764cf9b1882c14ef2c466f5cf8bf3a800e1a0b4e733f5880; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=1788*1*PC_VC; UN=cf313995; UM_distinctid=165c8784d0b235-091d970acb8e25-43480420-1fa400-165c8784d0c5d9; __yadk_uid=r8xjBndMEQI8WpxM0xWlKoTyVxH6iLn9
	
	cookie=[dict_test['name']+'='+dict_test['value'] for dict_test in browser.get_cookies()]
	cookie_str=';'.join(cookie)
2.7、selenium操作滚动条
(1)、基本操作
	①将滚动条拉到页面底部:
	js="window.scrollTo(0,document.body.scrollHeight)"
	browser.execute_script(js)
	②将滚动条拉到页面顶部
	js="var q=document.documentElement.scrollTop=0"
	browser.execute_script(js)
	③将滚动条滚动到可视范围内,只要能定位到该元素即可
	js="arguments[0].scrollIntoView(false);"
	browser.execute_script(js,目标元素)

(2)、进阶操作
	①每次拉动滚动条10%
	for i in range(1,11,2):
		height=float(i)/10
        js="document.documentElement.scrollTop=document.documentElement.scrollHeight * %f" %height
		browser.execute_script(js)
2.8、selenium显性等待和隐性等待
from selenium.webdriver.support.ui import WebDriverWait

(1)、名词解释
WebDriverWait :显性等待
implicitly_wait :隐性等待

(2)、区别
①time.sleep():让程序休眠一定时间,等休眠时间到了,不管元素是否找到,仍然强制往后执行。(针对整个程序)
②WebDriverWait():设置显性等待,配合until使用,在页面加载期间内,每隔一定时间去查看元素是否加载出来,如果没有加载出来则继续等待,直到超出最大等待时间,则抛出异常。反之在最大时间内找到该元素,则继续往后执行代码。(针对单个元素)
③implicity_wait():设置隐性等待,设置一个最长等待时间,如果网页在规定的时候内加载完毕,则执行下一步,否则会一直处于等待状态,直到超时。(针对整个网页)

例:WebDriverWait(browser,10).until(lambda browser:browser.find_element_by_link_text("动漫")
例:browser.implicitly_wait(10)
2.9、selenium文件上传
> (1)、基本操作 > ①上传过程一般有个input标签。selenium只要定位上传按钮,通过send_keys添加本地文件路径就可以了。
例:driver.find_element_by_xpath('//input[@value="上传"]').send_keys("C:/Users/Administrator/Desktop/test.txt")

猜你喜欢

转载自blog.csdn.net/cf313995/article/details/82765610