爬虫系列---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:\baidu_img.jpg")

十九 关闭浏览器

  • close() 关闭单个窗口

  • quit() 关闭所有窗口

本文推荐

****slenium官网:http://www.selenium.org.cn/1598.html

快速入门:http://www.testclass.net/selenium_python/

猜你喜欢

转载自www.cnblogs.com/angle6-liu/p/10446191.html