详解Selenium+PhantomJS+python简单实现爬虫的功能

Selenium

一、简介

selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样

selenium2支持通过驱动真实浏览器(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)

selenium2支持通过驱动无界面浏览器(HtmlUnit,PhantomJs)

二、安装

Windows

第一种方法是:下载源码安装,下载地址(https://pypi.python.org/pypi/selenium)解压并把整个目录放到C:\Python27\Lib\site-packages下面

第二种方法是:可以直接在C:\Python27\Scripts 下输入命令安装 pip install -U selenium

sudo pip install selenium

PhantomJS

一、简介

PhantomJS 是一个基于 WebKit(WebKit是一个开源的浏览器引擎,Chrome,Safari就是用的这个浏览器引擎) 的服务器端 JavaScript API,主要应用场景是:无需浏览器的 Web 测试,页面访问自动化,屏幕捕获,网络监控

二、安装

Windows

下载源码安装,下载地址(http://phantomjs.org/download.html)解压并把解压缩的路径添加到环境变量中即可,我自己的放到了C:\Python27\Scripts 下面

Linux

sudo apt-get install PhantomJS 

Selenium + PhantomJS + python 简单实现爬虫的功能

python可以使用selenium执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。selenium自己不带浏览器,可以使用第三方浏览器如Firefox,Chrome等,也可以使用headless浏览器如PhantomJS在后台执行。
在工作用遇到一个问题,当加载一个手机端的URL时候,会加载不上,需要我们在请求头中设置一个User-Agent,设置完以后就可以打开了(Windows下执行,linux下执行的话就不用加executable_path='C:\Python27\Scripts\phantomjs.exe')

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS) #设置userAgent
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ")

obj = webdriver.PhantomJS(executable_path='C:\Python27\Scripts\phantomjs.exe',desired_capabilities=dcap) #加载网址
obj.get('http://wap.95533pc.com')#打开网址
obj.save_screenshot("1.png")  #截图保存
obj.quit() # 关闭浏览器。当出现异常时记得在任务浏览器中关闭PhantomJS,因为会有多个PhantomJS在运行状态,影响电脑性能 

一、超时设置

webdriver类中有三个和时间相关的方法:

1.pageLoadTimeout    设置页面完全加载的超时时间,完全加载即完全渲染完成,同步和异步脚本都执行完
2.setScriptTimeout    设置异步脚本的超时时间
3.implicitlyWait         识别对象的智能等待时间

下面我们以获取校花网title为例来验证效果,因为校花网中图片比较多,所以加载的时间比较长,更能时间我们的效果(另一原因我就不说了,这样才能让我们学起来带劲,哈哈!!!)

from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
try:
  obj.get('http://www.xiaohuar.com')
  print obj.title
except Exception as e:
  print e

二、元素的定位

对象的定位是通过属性定位来实现的,这种属性就像人的身份证信息一样,或是其他的一些信息来找到这个对象,那我们下面就介绍下Webdriver提供的几个常用的定位方法

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"> 

上面这个是百度的输入框,我们可以发现我们可以用id来定位这个标签,然后就可以进行后面的操作了

from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
try:
  obj.get('http://www.baidu.com')
  obj.find_element_by_id('kw')          #通过ID定位
  obj.find_element_by_class_name('s_ipt')     #通过class属性定位
  obj.find_element_by_name('wd')         #通过标签name属性定位
  obj.find_element_by_tag_name('input')      #通过标签属性定位
  obj.find_element_by_css_selector('#kw')     #通过css方式定位
  obj.find_element_by_xpath("//input[@id='kw']") #通过xpath方式定位
  obj.find_element_by_link_text("贴吧")      #通过xpath方式定位

  print obj.find_element_by_id('kw').tag_name  #获取标签的类型
except Exception as e:
  print e  

 三、浏览器的操作

1、调用启动的浏览器不是全屏的,有时候会影响我们的某些操作,所以我们可以设置全屏

from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
obj.maximize_window() #设置全屏
try:
  obj.get('http://www.baidu.com')
  obj.save_screenshot('11.png') # 截取全屏,并保存
except Exception as e:
  print e

2、设置浏览器宽、高

from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
obj.set_window_size('480','800') #设置浏览器宽480,高800
try:
  obj.get('http://www.baidu.com')
  obj.save_screenshot('12.png') # 截取全屏,并保存
except Exception as e:
  print e

3、操作浏览器前进、后退

 from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
try:
  obj.get('http://www.baidu.com')  #访问百度首页
  obj.save_screenshot('1.png')
  obj.get('http://www.sina.com.cn') #访问新浪首页
  obj.save_screenshot('2.png')
  obj.back()              #回退到百度首页
  obj.save_screenshot('3.png')
  obj.forward()            #前进到新浪首页
  obj.save_screenshot('4.png')
except Exception as e:
  print e

四、操作测试对象

定位到元素以后,我们就应该对相应的对象进行某些操作,以达到我们某些特定的目的,那我们下面就介绍下Webdriver提供的几个常用的操作方法

from selenium import webdriver
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
try:
  obj.get('http://www.baidu.com')
  print obj.find_element_by_id("cp").text # 获取元素的文本信息
  obj.find_element_by_id('kw').clear()       #用于清除输入框的内容
  obj.find_element_by_id('kw').send_keys('Hello') #在输入框内输入Hello
  obj.find_element_by_id('su').click()       #用于点击按钮
  obj.find_element_by_id('su').submit()       #用于提交表单内容

except Exception as e:
  print e

五、键盘事件

1、键盘按键用法

from selenium.webdriver.common.keys import Keys
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
try:
  obj.get('http://www.baidu.com')
  obj.find_element_by_id('kw').send_keys(Keys.TAB)  #用于清除输入框的内容,相当于clear()
  obj.find_element_by_id('kw').send_keys('Hello')  #在输入框内输入Hello
  obj.find_element_by_id('su').send_keys(Keys.ENTER) #通过定位按钮,通过enter(回车)代替click()

except Exception as e:
  print e

2、键盘组合键使用

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
obj.set_page_load_timeout(5)
try:
  obj.get('http://www.baidu.com')
  obj.find_element_by_id('kw').send_keys(Keys.TAB)  #用于清除输入框的内容,相当于clear()
  obj.find_element_by_id('kw').send_keys('Hello')  #在输入框内输入Hello
  obj.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')  #ctrl + a 全选输入框内容
  obj.find_element_by_id('kw').send_keys(Keys.CONTROL,'x')  #ctrl + x 剪切输入框内容

except Exception as e:
  print e

六、中文乱码问题

selenium2 在python的send_keys()中输入中文会报错,其实在中文前面加一个u变成unicode就能搞定了

七、鼠标事件

1、鼠标右击

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
try:
  obj.get("http://pan.baidu.com")
  obj.find_element_by_id('TANGRAM__PSP_4__userName').send_keys('13201392325')  #定位并输入用户名
  obj.find_element_by_id('TANGRAM__PSP_4__password').send_keys('18399565576lu') #定位并输入密码
  obj.find_element_by_id('TANGRAM__PSP_4__submit').submit()            #提交表单内容
  f = obj.find_element_by_xpath('/html/body/div/div[2]/div[2]/....')       #定位到要点击的标签
  ActionChains(obj).context_click(f).perform()                    #对定位到的元素进行右键点击操作

except Exception as e:
  print e

2、鼠标双击 

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
obj = webdriver.PhantomJS(executable_path="D:\Python27\Scripts\phantomjs.exe")
try:
  obj.get("http://pan.baidu.com")
  obj.find_element_by_id('TANGRAM__PSP_4__userName').send_keys('13201392325')  #定位并输入用户名
  obj.find_element_by_id('TANGRAM__PSP_4__password').send_keys('18399565576lu') #定位并输入密码
  obj.find_element_by_id('TANGRAM__PSP_4__submit').submit()            #提交表单内容
  f = obj.find_element_by_xpath('/html/body/div/div[2]/div[2]/....')       #定位到要点击的标签
  ActionChains(obj).double_click(f).perform()                    #对定位到的元素进行双击操作

except Exception as e:
  print e

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

(0)

相关推荐

  • Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

    1.引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一部分实验了用xslt方式一次性提取静态网页内容并转换成xml格式.留下了一个问题:javascript管理的动态内容怎样提取?那么本文就回答这个问题. 2.提取动态内容的技术部件 在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的.但是一些Aja

  • 详解Selenium+PhantomJS+python简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver) selenium2支持通过驱动无界面浏览器(HtmlUnit,PhantomJs) 二.安装 Windows 第一种方法是:下载源码安装,下载地址(https://pypi.python.org/py

  • 详解如何用Python写个听小说的爬虫

    目录 书名和章节列表 音频地址 下载 完整代码 总结 在路上发现好多人都喜欢用耳机听小说,同事居然可以一整天的带着一只耳机听小说.小编表示非常的震惊.今天就用 Python 下载听小说 tingchina.com的音频. 书名和章节列表 随机点开一本书,这个页面可以使用 BeautifulSoup 获取书名和所有单个章节音频的列表.复制浏览器的地址,如:https://www.tingchina.com/yousheng/disp_31086.htm. from bs4 import Beaut

  • 详解如何使用Python网络爬虫获取招聘信息

    目录 前言 项目目标 项目准备 反爬措施 项目实现 效果展示 小结 前言 现在在疫情阶段,想找一份不错的工作变得更为困难,很多人会选择去网上看招聘信息.可是招聘信息有一些是错综复杂的.而且不能把全部的信息全部罗列出来,以外卖的58招聘网站来看,资料整理的不清晰. 项目目标 获取招聘信息,并批量把地点. 公司名.工资 .下载保存在txt文档. 项目准备 软件:PyCharm 需要的库:requests.lxml.fake_useragent 网站如下: https://gz.58.com/job/

  • 详解Selenium 元素定位和WebDriver常用方法

    一.定位元素的8种方式 1.方法介绍 定位一个元素 定位多个元素 含义 find_element_by_id() find_elements_by_id() 通过元素id定位 find_element_by_name() find_elements_by_name() 通过元素name定位 find_element_by_xpath() find_elements_by_xpath() 通过xpath表达式定位 find_element_by_link_text() find_elements_

  • 详解如何用Python模拟登录淘宝

    目录 一.淘宝登录流程 二.模拟登录实现 1.判断是否需要验证码 2.验证用户名密码 3.申请st码 4.使用st码登录 5.获取淘宝昵称 三.总结 1.代码结构 2.存在问题 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.selenium等库来模拟登录,但是目前我们还没有讲到这些库,只讲了requests库,那我们今天就来使用requests库模拟登录淘宝! 讲模拟登录淘宝之前,我们来回顾一下之前用requests库模拟登录豆瓣和新浪微博的过程:这一类模拟

  • 详解Java中的OkHttp JSONP爬虫

    目录 什么是JSOUP 什么是OkHttp 爬虫需要掌握的技术 需要的依赖 JSON入门Demo JSOUP常用方法 使用JSOUP 方式连接 User-Agent(随机) 后台爬虫的三大问题 selenium+phantomjs(维护中…内容重新整理) 什么是JSOUP JSOUP 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 官网 jsoup实现了WHATWG

  • 详解如何用Python登录豆瓣并爬取影评

    目录 一.需求背景 二.功能描述 三.技术方案 四.登录豆瓣 1.分析豆瓣登录接口 2.代码实现登录豆瓣 3.保存会话状态 4.这个Session对象是我们常说的session吗? 五.爬取影评 1.分析豆瓣影评接口 2.爬取一条影评数据 3.影评内容提取 4.批量爬取 六.分析影评 1.使用结巴分词 七.总结 上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化

  • 详解C++调用Python脚本中的函数的实例代码

    1.环境配置 安装完python后,把python的include和lib拷贝到自己的工程目录下 然后在工程中包括进去 2.例子 先写一个python的测试脚本,如下 这个脚本里面定义了两个函数Hello()和_add().我的脚本的文件名叫mytest.py C++代码: #include "stdafx.h" #include <stdlib.h> #include <iostream> #include "include\Python.h&quo

  • 详解如何创建Python元类

    什么是Python元类? Python元类是与Python的面向对象编程概念相关的高级功能之一.它确定类的行为,并进一步帮助其修改. 用Python创建的每个类都有一个基础的Metaclass.因此,在创建类时,您将间接使用元类.它隐式发生,您无需指定任何内容. 与元编程相关联的元类决定了程序对其自身进行操作的能力. 学习元类可能看起来很复杂,但是让我们先从一些类和对象的概念入手,以便于理解. Python中的类和对象 类是一个蓝图,是具有对象的逻辑实体. 一个简单的类在声明时没有分配任何内存,

  • 详解如何利用Python绘制迷宫小游戏

    目录 构思 绘制迷宫 走出迷宫 完整代码 更大的挑战 关于坐标系设置 周末在家,儿子闹着要玩游戏,让玩吧,不利于健康,不让玩吧,扛不住他折腾,于是想,不如一起搞个小游戏玩玩! 之前给他编过猜数字 和 掷骰子 游戏,现在已经没有吸引力了,就对他说:“我们来玩个迷宫游戏吧.” 果不其然,有了兴趣,于是和他一起设计实现起来,现在一起看看我们是怎么做的吧,说不定也能成为一个陪娃神器~ 先一睹为快: 构思 迷宫游戏,相对比较简单,设置好地图,然后用递归算法来寻找出口,并将过程显示出来,增强趣味性. 不如想

随机推荐