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 contextlib模块使用示例
Feb 18 Python
Python下的twisted框架入门指引
Apr 15 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python命名空间(namespace)简单介绍
Aug 10 Python
Python reversed函数及使用方法解析
Mar 17 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
Python urllib2运行过程原理解析
Jun 04 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
python3实现简单飞机大战
Nov 29 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
收集的php编写大型网站问题集
2007/03/06 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP7变量处理机制修改
2021/03/09 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Node.js Domain 模块实例详解
2020/03/18 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python 变量类型及命名规则介绍
2013/06/08 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
上海微创软件面试题
2012/06/14 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
创业者是否需要商业计划书?
2014/02/07 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Python基础 括号()[]{}的详解
2021/11/07 Python