爬虫系列---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详解的主要内容,如果未能解决你的问题,请参考以下文章

爬虫框架 | selenium详解

Selenium用法详解浏览器控制JAVA爬虫

Selenium用法详解浏览器控制JAVA爬虫

Selenium用法详解上传下载JAVA爬虫

Selenium用法详解cookies操作JAVA爬虫

Selenium用法详解弹框处理JAVA爬虫