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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
Django实现学生管理系统
Feb 26 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
Python3 Click模块的使用方法详解
Feb 12 Python
python 模拟登录B站的示例代码
Dec 15 Python
使用scrapy实现增量式爬取方式
Jun 21 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
PHP新手上路(九)
2006/10/09 PHP
Admin generator, filters and I18n
2011/10/06 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
使用python编写监听端
2018/04/12 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python判断所输入的任意一个正整数是否为素数的两种方法
2019/06/27 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
刑事附带民事代理词
2015/05/25 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
PL350与SW11的比较
2021/04/22 无线电
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js