python爬虫工程师 成长之路八 Selenium WebDriver
文章目录
- Selenium WebDriver 简介
- Selenium WebDriver 原理
- Selenium WebDriver 安装
- Selenium WebDriver 使用
- 浏览器常用操作
- 单对象定位
- 一组对象定位
- 模拟用户操作
- 最后
Selenium WebDriver 简介
Selenium WebDriver是一个本地和远程的实时浏览器自动化工具,是最接近的模拟用户行为。
WebDriver的目标是提供一个良好设计的面向对象的API,提供了对于现代先进web应用程序测试问题的改进支持。
Selenium-Webdriver更好的支持页面本身不重新加载而页面的元素改变的动态网页。
Selenium WebDriver 原理
WebDriver是按照C/S(Client/Server) 的模式设计的。
WebDriver 启动目标浏览器,并绑定到指定端口。该启动的浏览器实例,做为web driver的remote server。
Client 端根据我们的需求以http请求形式发送给Server,并在执行各种操作后将返回值等信息返回。
Server端,也就是Remote server 需要依赖原生的浏览器组件(如:chromedriver.exe)来等待 Client 发送请求并做出响应。
Selenium WebDriver 安装
安装selenium库,在命令行中输入
pip install selenium
出现如下字样,则安装成功
Successfully installed selenium
下载与浏览器版本相匹配的webdriver
chromedriver.exe
http://chromedriver.storage.googleapis.com/index.html
下载后将chromedriver.exe放到python安装目录下的Scripts目录
Selenium WebDriver 使用
浏览器常用操作
启动浏览器
不同的浏览器,方式略微不同
from selenium import webdriver
#谷歌浏览器
dr = webdriver.Chrome()
#火狐浏览器
dr = webdriver.Firefox()
打开网页
执行该代码之后,自动打开你输入的网址
dr.get('http://www.baidu.com')
关闭浏览器
在工作结束后常常需要关闭浏览器,关闭浏览器的方式有两种:
- close():关闭当前的浏览器窗口
- quit():不仅会关闭浏览器窗口,还会彻底的退出webdriver,释放与driver server之间的连接,释放所有的资源
from selenium import webdriver
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')
#退出浏览器
dr.quit()
#dr.close()
最大化浏览器
from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')
#最大化浏览器
dr.maximize_window()
#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()
自定义浏览器大小
from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')dr.set_window_size(240, 320)#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()
打印当前页面的信息
打印当前页面的title、url以及页面源码(源码过多就不进行展示了)
from selenium import webdriver
import time
#谷歌浏览器
dr = webdriver.Chrome()
#打开网页
dr.get('http://www.baidu.com')print('current_url:',dr.current_url)
print('source:',dr.page_source)
print('title:',dr.title)#便于观察
time.sleep(3)
#退出浏览器
dr.quit()
#dr.close()
实现浏览器前进和后退
后退会返回到当前网页的上一个网页,前进也会返回到当前网页的上一个网页
from selenium import webdriver
import time
import osdr = webdriver.Chrome()first_url = 'http://www.baidu.com'
dr.get(first_url)
print('current_url',dr.current_url)
time.sleep(1)second_url = 'http://www.news.baidu.com'
dr.get(second_url)
print('current_url',dr.current_url)
time.sleep(1)dr.back()
print("backing to %s"%(first_url))time.sleep(1)
dr.forward()
print("forward to %s"%(second_url))
time.sleep(1)
dr.quit()
单对象定位
- find_element(),用于单对象定位。
- 对象的定位和操作是webdriver的核心内容,其中操作是建立在定位的基础之上,因此对象定位的地位就越发显得重要了
演示文档
打开百度首页→鼠标右键点击→查看网页源码
webdriver提供了一系列的对象定位方法,常用的有:
by_id
通过id定位需要用id的值定位
#通过id定位
print(dr.find_element_by_id('head').text)
by_name
通过name定位需要用name的值定位
#通过name定位
dr.find_element_by_name('mp')
by_class_name
通过class name定位需要用class name的值定位
#通过name定位
dr.find_element_by_name('mp')
by_tag_name
通过tag name定位需要用标签的值(如,<a>的值为a)定位
#通过tag name定位
print(dr.find_element_by_tag_name('div').text)
by_link_text
通过链接的文字描述来定位
如匹配下面图片中的新闻链接
dr.find_element_by_link_text("新闻")
by_css_selector
不懂css selector的可以点击了解或只用上面的方式CSS介绍
#获取标签名为div的标签
dr.find_element_by_css_selector('div')
by_xpath
不懂xpath的可以点击了解或用其他的方式xpath lxml库
dr.find_element_by_xpath('/html/body/form/div/label')
获取属性
获取div标签的id属性
dr.find_element_by_tag_name('div').get_attribute('id')
获取div标签的文本内容
print(dr.find_element_by_tag_name('div').text)
一组对象定位
find_elements(),常用于定位一组对象或批量操作对象,用法与前面的单对象定位(find_element())一致(不清楚的往前面翻就行)。
模拟用户操作
element.click()
模拟用户点击对象element
#
dr.find_element_by_link_text("新闻").click()
element.send_keys
模拟用户向名为p的文本框输入python
dr.find_element_by_name('q').send_keys('python')
element.clear()
模拟用户清除输入的内容
dr.find_element_by_name('q').clear()
模拟键盘输入
模拟用户在键盘上输入
from selenium.webdriver.common.keys import Keys#模拟control+a
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'a'))
#模拟control+c
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'c'))
#模拟control+x
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'v'))
最后
可以关注一下我的公众号,最近开始写公众号,我会在上面分享一些资源和发布一些csdn上发布不了的干货
点个关注是对博主最大的支持
python爬虫工程师 成长之路八 Selenium WebDriver相关推荐
- python爬虫工程师 成长之路十 selenium+phantomjs+request爬取lol所有英雄头像和装备图片
文章目录 爬取所有英雄头像 选择爬取目标 寻找图片位置 引入selenium和phantomjs 构造xpath对元素定位 获取每个英雄的名字和头像url 最终步骤 爬取装备图片 最后 爬取所有英雄头 ...
- python爬虫工程师 成长之路一 初识爬虫
文章目录 爬虫简介 为什么要学习爬虫 爬虫的结构 爬虫的类型 聚焦爬虫的工作原理和过程 爬虫常用功能 搜索引擎介绍 用户爬虫 最后 爬虫简介 爬虫,就是网络爬虫,也称为网页蜘蛛.网络机器人.网络蚂蚁等 ...
- python爬虫工程师 成长之路六(二) 非结构化数据之lxml库
文章目录 lxml库 介绍 lxml库 使用 最后 lxml库 介绍 lxml是一个使用python编写的库,处理XML非常方便,另外还支持XPath,(上篇博客的XPath派上用处了XPath 基础 ...
- python爬虫工程师 成长之路六(一) 非结构化数据之XPath
文章目录 XPath 介绍 XPath 节点 XPath 语法 路径表达式 谓语 通配符 选取若干路径 XPath 轴 步(step) XPath 运算符 最后 XPath 介绍 XPath(XML ...
- 精品课python_python工程师成长之路精品课程(全套)
python工程师成长之路精品课程(全套) 有需要联系我:QQ:1844912514 什么是Python? Python是一门面向对象的编程语言,它相对于其他语言,更加易学.易读,非常适合快速开发. ...
- 微专业python爬虫工程师_从零起步 系统入门Python爬虫工程师
课程简介: 从零起步 系统入门Python爬虫工程师 大数据时代,python爬虫工程师人才猛增,本课程专为爬虫工程师打造,课程有四个阶段,爬虫0基础入门->项目实战->爬虫难点突破-&g ...
- 网络工程师----成长之路
网络工程师----成长之路 常用程序快捷键命令(网络工程师) 常用CMD命令(网络工程师) 常用Linux命令(网络工程师) 问题点宝库 第一章:一.網絡工程師–简介 第二章:二.网络工程师学习阶段– ...
- python爬虫面试题-扣丁学堂解析Python爬虫工程师面试题汇总
扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1629浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...
- python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总
扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...
最新文章
- 经验分享 怎么新建PDF文件
- 这本《Python+TensorFlow机器学习实战》给你送到家!
- java isempty_Optional.isEmpty()即将加入Java吗?
- 【OpenCV 例程200篇】25. 图像的平移
- matlab读取xls、xlsx、csv文件
- git使用git push 命令跳出remote: Permission to Aname denied to usernameB 的问题
- Linux录音软件audacity安装:sudo yum install audacity
- php四种基础算法:冒泡,选择,插入和快速排序法PHP基础教程
- python生成词云教程(附带QQ聊天记录生成词云实战)
- Linux或Linux虚拟机桥接模式使用Python2认证Drcom
- 如何将视频转换成文字
- Word插入特殊符号
- videojs-dynamic-watermark: video.js 视频添加文字水印
- 计算机基础——4.1 数字通信入门
- 笔记本触控板使用技巧!
- oracle 关闭归档,Oracle归档的开启和关闭
- 百度图片批量下载助手
- JavaScript模拟轮播图效果
- 云计算学习4——Nova组件服务
- html5视频作为页面背景
热门文章
- python自己做个定时器_简单实现python定时器
- Python实现名片管理系统(面向对象版)
- 基于ffmpeg实现音视频转码
- Java Web 实现 QQ第三方登录
- android shn1 获取_Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法
- 金蝶K3Cloud插件 -- 单据保存自动提交并审核(c#)
- 10万字C语言入门手册,历时三个月,详细的C语言教程终于出炉了,给你全新C语言入门体验
- Python错误集锦:pandas读取excel提示ImportError: Missing optional dependency ‘xlrd’.
- 什么是Qt Quick
- Ruby on Rails视频教程