python爬虫selenium和phantomJs使用方法解析


Posted in Python onAugust 08, 2019

1.selenum:三方库。可以实现让浏览器完成自动化的操作。

2.环境搭建

2.1 安装:

pip install selenium

2.2 获取浏览器的驱动程序

下载地址:

http://chromedriver.storage.googleapis.com/index.html

http://npm.taobao.org/mirrors/chromedriver/

浏览器版本和驱动版本的对应关系表:

chromedriver版本 支持的Chrome版本
v2.46 v71-73
v2.45 v70-72
v2.44 v69-71
v2.43 v69-71
v2.42 v68-70
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46
v2.17 v42-43
v2.13 v42-45
v2.15 v40-43
v2.14 v39-42
v2.13 v38-41
v2.12 v36-40
v2.11 v36-40
v2.10 v33-36
v2.9 v31-34
v2.8 v30-33
v2.7 v30-33
v2.6 v29-32
v2.5 v29-32
v2.4 v29-32

所有chromedriver均可在下面链接中下载到:

http://chromedriver.storage.googleapis.com/index.html 

现在有一点好的是出了按照chrome版本对应的driver,直接按照浏览器版本去找对应的driver(只对应大版本就行),不用再费心去对应了,大家可以尝试一下

python爬虫selenium和phantomJs使用方法解析

有些同学说下不了,到taobao下也是可以的:

http://npm.taobao.org/mirrors/chromedriver/

定位元素的8种方式:

#使用下面的方法,查找指定的元素进行操作即可
find_element_by_id 根据id找节点
find_elements_by_name 根据name找
find_elements_by_xpath 根据xpath查找
find_elements_by_tag_name 根据标签名找
find_elements_by_class_name 根据class名字查找
# 通过id定位:
dr.find_element_by_id("kw")

# 通过name定位:
dr.find_element_by_name("wd")

# 通过class name定位:
dr.find_element_by_class_name("s_ipt")

# 通过tag name定位:
dr.find_element_by_tag_name("input")

# 通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")

# 通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")

接下来,我们的页面上有一组文本链接。

<a class="mnav" href="http://news.baidu.com" rel="external nofollow" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" rel="external nofollow" name="tj_trhao123">hao123</a>
# 通过link text定位:
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")

# 通过partial link text定位:
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")

Selenium库下webdriver模块常用方法的使用

控制浏览器操作的一些方法

方法 说明

  • set_window_size() 设置浏览器的大小
  • back() 控制浏览器后退
  • forward() 控制浏览器前进
  • refresh() 刷新当前页面
  • clear() 清除文本
  • send_keys (value) 模拟按键输入
  • click() 单击元素
  • submit() 用于提交表单
  • get_attribute(name) 获取元素属性值
  • is_displayed() 设置该元素是否用户可见
  • size 返回元素的尺寸
  • text 获取元素的文本

---------------------

例子:

1.chrom浏览器自动搜索

from selenium import webdriver
from time import sleep
# 创建浏览器对象 驱动为浏览器的路径
bro = webdriver.Chrome("./chromedriver.exe")
url = "https://www.baidu.com"7 # 发送请求
bro.get(url)
# 让百度指定词条的搜索
text = bro.find_element_by_id('kw')
# 发送关键字
text.send_keys('python')
# 点击搜索按钮
button = bro.find_element_by_id('su')
button.click()
# 关闭浏览器
bro.quit()

2.phantomjs无界面浏览器,其自动化流程上述操作谷歌自动化流程一致。

from selenium import webdriver
from time import sleep
bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
爬取\phantomjs?2.1.1?windows/bin/phantomjs.exe')
url = "https://www.baidu.com"
# 发送请求
bro.get(url)
bro.save_screenshot('./1.png')
# 让百度指定词条的搜索
text = bro.find_element_by_id('kw')
# 发送关键字
text.send_keys('python')
bro.save_screenshot('./2.png')
# 点击搜索按钮
button = bro.find_element_by_id('su')
button.click()
sleep(3)
bro.save_screenshot('./3.png')
# 关闭浏览器
bro.quit()

3.豆瓣网电影排行榜滚动条数据

from selenium import webdriver
from time import sleep3 url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&typ
e=24&interval_id=100:90&action='
bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
爬取\phantomjs?2.1.1?windows/bin/phantomjs.exe')
bro.get(url)
sleep(1)
bro.save_screenshot("./1.png")
js = 'window.scrollTo(0,document.body.scrollHeight)'
# 执行js代码 滚动条
bro.execute_script(js)
sleep(1)
bro.save_screenshot('./2.png')
# 获取页面数据
page_source = bro.page_source
print(page_source)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
Dec 19 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
Python操作redis和mongoDB的方法
Dec 19 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
python如何实现复制目录到指定目录
Feb 13 Python
Python双链表原理与实现方法详解
Feb 22 Python
Python while true实现爬虫定时任务
Jun 08 Python
python 实现超级玛丽游戏
Nov 25 Python
Python安装使用Scrapy框架
Apr 12 Python
Python2和3字符编码的区别知识点整理
Aug 08 #Python
Python编程中类与类的关系详解
Aug 08 #Python
python os.fork() 循环输出方法
Aug 08 #Python
对python中的os.getpid()和os.fork()函数详解
Aug 08 #Python
在Python中os.fork()产生子进程的例子
Aug 08 #Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 #Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 #Python
You might like
基于mysql的论坛(7)
2006/10/09 PHP
php与paypal整合方法
2010/11/28 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中for循环详解
2014/01/17 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
python db类用法说明
2020/07/07 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
岗位聘任书范文
2014/03/29 职场文书
2015年读书月活动总结
2015/03/26 职场文书
微观世界观后感
2015/06/10 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
python识别围棋定位棋盘位置
2021/07/26 Python