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模拟登录12306的方法
Dec 30 Python
浅析Python多线程下的变量问题
Apr 28 Python
python交互式图形编程实例(三)
Nov 17 Python
Django处理文件上传File Uploads的实例
May 28 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
python pandas dataframe 去重函数的具体使用
Jul 20 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如何透过ODBC来存取数据库
2006/10/09 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
ThinkPHP之getField详解
2014/06/20 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
Python与Redis的连接教程
2015/04/22 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
Python request post上传文件常见要点
2020/11/20 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
学雷锋志愿服务月活动总结
2014/03/09 职场文书
拓展策划方案
2014/06/03 职场文书
教师培训简讯
2015/07/20 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers