- selenium介绍
(1)、selenium是一个网页自动化测试的工具,使用它可以操作浏览器来模拟人的行为。
(2)、selenium在爬虫中的应用:
①获取动态的网页数据,一些动态的数据在网页的源代码中并没有显示,这时候可以考虑用selenium获取。
②用于模拟登陆,对于一些需要登陆才能获取到数据的网页,一般如果采用分析参数破解的话,需要耗费大量的时间和精力进行网站的登陆的破解,而如果使用selenium的话,就可以完全模拟人的登陆行为来进行网站登陆。就不需要分析参数进行网站的破解。
(3)、selenium的特点
①它是通过驱动浏览器来进行网页的登陆,或者是获取网页的信息。
②由于selenium是驱动浏览器进行数据的爬取,而浏览器的打开,对网页发起请求,渲染页面都需要耗费大量的时间。所以一般不使用selenium进行网站数据的爬取,除非无法通过分析请求的方式进行网站登陆,或者网站是动态网站,页面源代码中获取不到数据的这种情况下,才考虑使用selenium来进行爬取。
③selenium提供的一些元素定位和查找的方法都是用纯Python实现的,效率比较低。
④selenium是免费开源的,支持很多的主流浏览器,IE,Chrome,Opera,FireFox,Safari等
-
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")