爬虫系列---selenium详解
Posted angle6-liu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫系列---selenium详解相关的知识,希望对你有一定的参考价值。
一 安装
pip install Selenium
二 安装驱动
chrome驱动文件:点击下载chromedriver (yueyu下载)
三 配置chromedrive的路径(仅添加环境变量即可)
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:GeckoDriver”目录添加到Path的值中。比如:Path字段;F:GeckoDriver
四 selenium定位操作
- find_element_by_id() #通过id查找获取
- find_element_by_name() #通过name属性查找
- find_element_by_class_name() #通过class属性查找
- find_element_by_tag_name() #通过标签名字查抄
- find_element_by_link_text() #通过浏览器中可点击的文本查找
- find_element_by_xpath() #通过xpath表达式查找
- find_element_by_css_selector() #通过css选择器查找
driver=webdriver.Chrome() #实例化一个浏览器 driver.get(‘https://www.baidu.com‘) #浏览器访问百度 input_tag=driver.find_element_by_id(‘kw‘) #获取输入框 input_tag.send_keys(‘赵丽颖‘)#输入框中输入‘赵丽颖 driver.find_element_by_id(‘su‘).click() #找到’百度一下‘按钮,并点击,开始搜索 driver.find_element_by_link_text(‘知道‘).click() #点击页面上的 ’知道‘
find_element_by_id(‘kw‘):
find_element_by_link_text(‘知道‘)
五 浏览器控制相关操作函数
- 设置浏览器窗口大小:driver.set_window_size(480, 800)
- 回退到上一个访问页面:driver.back()
- 前进到下一个访问页面:driver.forward()
#设置浏览器显示窗口大小 driver.set_window_size(480,800) driver.get(‘https://www.zhihu.com‘) #访问知乎 driver.back() #回退到上一个访问页面 driver.forward() #前进到下一个访问过的页面
drive.quit() #退出浏览器
六 webdriver常用的方法
- 点击和输入
- click() 点击
- send_keys(value) 输入值
- clear() 清空输入
driver=webdriver.Chrome() #实例化一个浏览器 driver.get(‘https://www.baidu.com‘) #浏览器访问百度 input_tag.send_keys(‘赵丽颖‘)#输入框中输入‘赵丽颖 driver.find_element_by_id(‘kw‘).clear() #清空输入框 driver.find_element_by_id(‘kw‘).send_keys(‘周杰伦‘) #输入查询 ’周杰伦‘ driver.find_element_by_id("su").click() #点击百度一下
- size 元素对应的大小
- text 获取对应元素的文字
# 属性 size和文本 driver.get(‘http://www.baidu.com‘) driver.find_element_by_id(‘kw‘).size #获取搜索的元素的尺寸{‘height‘: 22, ‘width‘: 395} driver.find_element_by_id("cp").text #获取指定标签的文本值 driver.quit()
七 鼠标事件
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
- perform():执行所有ActionChains中存储的所有行为
- context_click():右击
- double_click():双击
- drag_and_drop():拖动
- move_to_element():悬浮
执行流程
- 1 定位到响应元素
- 2 ActionChains(实例化的浏览器).鼠标操作(带操作的元素).perform() 使用(什么浏览器),用什么鼠标操作功能,操作(什么元素),perform()提交给浏览器执行响应的行为
#引入 ActionChains类 from selenium.webdriver.common.action_chains import ActionChains driver=webdriver.Chrome() driver.get("https://www.baidu.cn") #鼠标定位到需要悬浮的元素 above=driver.find_element_by_link_text(‘设置‘) ditu=driver.find_element_by_link_text(‘地图‘) #对定位的元素执行鼠标操作 ActionChains(driver).move_to_element(above).perform() ActionChains(driver).double_click(above).perform() #鼠标右击 driver.quit() #退出
八 键盘事件
- 1 引入Keys 模块: from selenium.webdriver.common.keys import Keys
- 2 通过send_keys()发送信息
- 3 组合形式 Keys.BACK_SPACE 删除键
Keys.SPACE 空格键 Keys.F1 键盘F1键 Keys.CONTROL,‘a‘ 全选 contrl表示contrl键
#引入Keys模块 from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome() driver.get(‘https://www.baidu.com‘) #输入一个内容 input=driver.find_element_by_id(‘kw‘) input.send_keys(‘seleniumGG‘) #删除多余的GG input.send_keys(Keys.BACKSPACE) input.send_keys(Keys.BACKSPACE) #继续输入 input.send_keys(‘教程‘) #全选输入框的内容,一次性删除 input.send_keys(Keys.CONTROL,‘a‘) input.send_keys(Keys.BACKSPACE) #输入周杰伦,通过回车键来代替点击‘百度一下‘ input.send_keys(‘周杰伦‘) input.send_keys(Keys.ENTER) driver.quit()
九 断言信息
掌握三个属性
- title:用于获得当前页面的标题。
- current_url:用户获得当前页面的URL。
- text:获取搜索条目的文本信息。
#调用方式 driver.title #返回当前页面的标题 driver.current_url #返回当前页面的url user = driver.find_element_by_class_name(‘nums‘).text #获取某元素的文本信息
十 定位一组元素
- find_elements_by_id()
- find_elements_by_name()
- find_elements_by_class_name()
- find_elements_by_tag_name()
- find_elements_by_link_text()
- find_elements_by_partial_link_text()
- find_elements_by_xpath()
- find_elements_by_css_selector()
a_list=driver.find_elements_by_xpath(‘//div[@id="u1"]/a‘)
#获取图片中的a标签文本信息 from time import sleep driver = webdriver.Chrome() driver.get("https://www.baidu.com") a_list=driver.find_elements_by_xpath(‘//div[@id="u1"]/a‘) for a in a_list: print(a.text) driver.quit()
十一 多表单切换(人人网登录)
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.renren.com/") #输入账户密码 driver.find_element_by_id(‘email‘).send_keys(‘1837081**31(账号)‘) #换成自己的账号 driver.find_element_by_id(‘password‘).send_keys(‘QWERT***IO(密码)‘) #换成自己的密码 #点击登录 driver.find_element_by_id(‘login‘).click() driver.quit()
十二 多窗口切换
- driver.switch_to_window(某窗口)
driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("http://www.baidu.com") #获取百度搜索窗口句柄 search_windows=driver.current_window_handle driver.find_element_by_link_text(‘登录‘).click() driver.find_element_by_link_text(‘立即注册‘).click() #获取当前窗口句柄 register_windows=driver.current_window_handle driver.switch_to_window(search_windows) #浏览器跳转记录的窗口
十三 警告框的处理 (****)
- 1 获取警告框 dialog=driver.switch_to_alert
- 2 dialog.accept() 或者 dialog.send_keys(1) text:返回 alert/confirm/prompt 中的文字信息。
- 基本方法
- accept():接受现有警告框。
- dismiss():解散现有警告框。
- send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get(‘http://www.baidu.com‘) # 鼠标悬停至“设置”链接 link = driver.find_element_by_link_text(‘设置‘) ActionChains(driver).move_to_element(link).perform() # 打开搜索设置 driver.find_element_by_link_text("搜索设置").click() # 保存设置 driver.find_element_by_class_name("prefpanelgo").click() time.sleep(2) #获取警告框对象 dialog=driver.switch_to_alert() dialog.text #获取警告框的内容 dialog.accept() #接受结果,确认 driver.quit()
十四 下拉框选择
#核心代码 from selenium.webdriver.support.select import Select #搜索结果显示条数设置 sel=driver.find_element_by_xpath(‘//*[@id="nr"]‘) Select(sel).select_by_value(‘10‘)
#第一步导包 from selenium import webdriver from selenium.webdriver.support.select import Select from time import sleep #驱动网页 driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get(‘http://www.baidu.com‘) # 鼠标悬停至“设置”链接 driver.find_element_by_link_text(‘设置‘).click() sleep(1) # 打开搜索设置 driver.find_element_by_link_text("搜索设置").click() sleep(2) #搜索结果显示条数设置 sel=driver.find_element_by_xpath(‘//*[@id="nr"]‘) Select(sel).select_by_value(‘10‘) #保存并关闭 driver.find_element_by_class_name(‘prefpanelgo‘).click() #处理警告框 #1 获取警告框对象 dialog=driver.switch_to_alert() #2 打印文本值 print(dialog.text) #已经记录下您的使用偏好 #3 接受 dialog.accept() driver.quit()
十五 文件上传
- 定位上传按钮,添加本地文件 -driver.find_element_by_name("file").send_keys(‘D:upload_file.txt‘)
十六 cookie操作
- get_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的选项,目前支持的选项包括“路径”,“域”。
-
delete_all_cookies(): 删除所有cookie信息。
实际使用 cookie= driver.get_cookies() #获取cookie driver.add_cookie({‘name‘: ‘key-aaaaaaa‘, ‘value‘: ‘value-bbbbbb‘}) #添加cookie
十七 调用javascript代码
-
window.scrollTo(0,450); #滑动条往下滑动450
-
执行方式 js="window.scrollTo(100,450);"
driver.execute_script(js)
js=‘window.scrollTo(0,document.body.scrollHeight)‘ #下滑到底部 driver.execute_script(js)
十八 窗口截图
- 截取当前窗口,并指定截图图片的保存位置
- driver.get_screenshot_as_file("D:aidu_img.jpg")
十九 关闭浏览器
-
close() 关闭单个窗口
-
quit() 关闭所有窗口
本文推荐
****slenium官网:http://www.selenium.org.cn/1598.html
快速入门:http://www.testclass.net/selenium_python/
以上是关于爬虫系列---selenium详解的主要内容,如果未能解决你的问题,请参考以下文章