Python爬虫小白入门之PhatomJS+Selenium第一篇

发表于:2017-1-16 13:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:阿里波特    来源:51Testing软件测试网采编

分享:
  3. PhatomJS 的使用
  在网上搜了一下,没有找到中文的官网文档,只找到了PhatomJS英文官方文档。
  3.1 举个栗子
  先来一个官网上的例子,PhatomJS执行js文件,输出“Hello, World!”
  新建一个js文件,包含下面的代码,然后保存为hello.js。
  console.log('Hello, world!');
  phantom.exit();  #用来终止phtomjs程序
  打开cmd命令窗口,进入到hello.js 文件所在目录,执行下面的命令:
  phantomjs hello.js
  输出:
  Hello, world!
  这个例子虽然方法比较笨,需要先创建一个js文件,然后再去执行。但是演示了PhatomJS的一个很重要的功能,就是执行js代码。我们后面会用到它来执行下拉操作哦。
  3.2 再来个栗子
  我们使用PhatomJS来请求一个网页,然后把网页截图保存。
  创建一个js文件,包含下面的代码,保存为music.js
  var page = require('webpage').create();
  page.open('http://music.163.com/', function(status) {
  console.log("Status: " + status);
  if(status === "success") {
  page.render('music.png');
  }
  phantom.exit();
  });
  然后使用cmd命令窗口,在music.js文件所在目录,执行下面的命令:
  phatomjs music.js
  这样会有一个屏幕截图保存在文件所在的文件夹喽。
  3.3 其他栗子
  还有一些功能就不细细展开了,知道常用的就可以继续咱们的爬虫了。有用到其他功能的童鞋们去官网看看例子。
  对了,官网还有许多栗子,奉上链接:Phatomjs官网栗子。
  四、Selenium
  1. 简介
  Selenium是一个自动化测试框架,广泛的用于自动化测试领域(是不是真的广泛用于自动化测试领域我也不知道,没怎么搞过自动化测试 -_-!,这是我臆测的 = ̄ω ̄=)。因为它能够模拟人工操作,比如能在浏览器中点击按钮、在输入框中输入文本、自动填充表单、还能进行浏览器窗口的切换、对弹出窗口进行操作。也就是说你能手动做的东西,基本都能用它来实现自动化!
  自己总结的大白话介绍~,大家凑合看哦。主要是文学水平有限,青春期的时候还想当一个文艺青年,没事儿矫情矫情写点东西,还注重个押韵啥的,学了理工科以后,矫情的东西受不了了,喜欢直接了当的。哎呦,跑偏了,赶紧回归正题!
  该框架还支持多种语言:Java、C#、Python、Ruby、PHP、Perl、JavaScript。
  当然,我们使用的是面向Python语言的API。
  2. 安装 Selenium
  可以使用pip install selenium来安装。使用Anaconda3版本的童鞋们,conda install selenium在我的机器上不会下载,未找到原因。但是同样使用pip install selenium安装成功了。通过在命令行里面输入conda list,可以看到已经安装的包。
  同时装有Python2.7和Python3.5的童鞋,使用下面的命令来安装。
  py -3 -m pip install selenium
  3. Selenium 的使用
  Selenium支持很多语言的使用,上面也提到了。其他语言的使用我没有接触过,直接看Python语言的使用。官网:Selenium with Python。
  3.1 同样先来个栗子
  因为PhatomJS没有界面,在使用的时候没有直观感受。所以,我们暂时使用Chrome浏览器代替PhatomJS。
  首先下载Chrome浏览器驱动:下载地址,选择自己的系统版本,然后下载。这是一个压缩包,解压后存到一个目录中,然后把该目录添加到环境变量。因为上面的PhatomJS已经演示过添加环境变量的流程,这里就不赘述了。
  在PyCharm中输入下面代码,然后运行看看有什么反应。
  from selenium import webdriver  #导入Selenium的webdriver
  from selenium.webdriver.common.keys import Keys  #导入Keys
  driver = webdriver.Chrome()  #指定使用的浏览器,初始化webdriver
  driver.get("http://www.python.org")  #请求网页地址
  assert "Python" in driver.title  #看看Python关键字是否在网页title中,如果在则继续,如果不在,程序跳出。
  elem = driver.find_element_by_name("q")  #找到name为q的元素,这里是个搜索框
  elem.clear()  #清空搜索框中的内容
  elem.send_keys("pycon")  #在搜索框中输入pycon
  elem.send_keys(Keys.RETURN)  #相当于回车键,提交
  assert "No results found." not in driver.page_source  #如果当前页面文本中有“No results found.”则程序跳出
  driver.close()  #关闭webdriver
  哎呀,其实浏览器的变化流程我都写到上面的代码的注释中了,就不再说一遍了哦。
  通过上面的例子,我们可以大概的了解了Selenium都能做什么。个人认为其中比较重要的就是定位,即找到页面中的元素,然后进行相关操作。
  3.2 导航操作 Navigating
  导航操作的使用非常简单,完全可以通名字就知道它们是干什么的,不信先给你几个例子瞧瞧:
  element = driver.find_element_by_id("passwd-id")  #通过id获取元素
  element = driver.find_element_by_name("passwd")  #通过name获取元素
  element = driver.find_element_by_xpath("//input[@id='passwd-id']")  #通过使用xpath匹配获取元素
  下面列出详细的定位方法。有定位一个元素的,也有定位多个元素的。
  定位一个元素:
  find_element_by_id
  find_element_by_name
  find_element_by_xpath
  find_element_by_link_text
  find_element_by_partial_link_text
  find_element_by_tag_name
  find_element_by_class_name
  find_element_by_css_selector
  定位多个元素:
  find_elements_by_name
  find_elements_by_xpath
  find_elements_by_link_text
  find_elements_by_partial_link_text
  find_elements_by_tag_name
  find_elements_by_class_name
  find_elements_by_css_selector
  通过导航操作,我们就可以在找到想找的元素,然后进行接下来的处理,比如,想在一个输入框中输入数据。看3.1的那个栗子,通过导航,找到了name为p的输入框,然后使用send_keys在输入框中写入数据:
  elem.send_keys("pycon")
  我们知道了如何在输入框中输入数据,那如果我们碰到了下拉框该怎么办呢?
  from selenium.webdriver.support.ui import Select   #导入Select
  select = Select(driver.find_element_by_name('name'))  #通过Select来定义该元素是下拉框
  select.select_by_index(index)  #通过下拉元素的位置来选择
  select.select_by_visible_text("text")  #通过下拉元素的内容来选择
  select.select_by_value(value)  #通过下拉元素的取值来选择
  来看一个下拉框的HTML:
  <select name="cars">
  <option value ="volvo">沃尔沃</option>
  <option value ="bmw">宝马</option>
  <option value="benz">奔驰</option>
  <option value="audi">奥迪</option>
  </select>
  结合上面的例子:
  from selenium.webdriver.support.ui import Select
  select = Select(driver.find_element_by_name('cars'))  #找到name为cars的select标签
  select.select_by_index(1)  #下拉框选中沃尔沃
  select.select_by_visible_text("宝马")  #下拉框选中宝马
  select.select_by_value("benz")  #下拉框选中奥迪
  嗯...,让我想想还有什么... ...。对了,还有一个操作特别常用,就是点击操作。这个很简单:
  elem.click()
  在找到的元素后面加上click()就可以了。
  3.3 Cookies
  我们想要爬取的网站有些可能需要登录,这样就需要在请求网站的时候添加Cookies。
  driver.get("http://www.example.com") #先请求一个网页
  cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} #设置cookie内容
  driver.add_cookie(cookie)  #添加cookie
  3.4 其他
  还有其他的功能,比如拖拽页面的元素、浏览器切换、处理弹出框口等。我就不一一列举了,有需要的小伙伴儿们去看看官网吧。
  五、后语
  我们的PhatomJS 和Selenium 已经安装完成,并且了解了他们的使用。
  这篇就先到这里吧,下一篇开始改造我们的小爬虫喽。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号