译者的话

有许多网页使用Ajax获取数据的,但Ajax接口有许多加密参数,因此我们难以直接找出其规律,也很难直接分析Ajax来抓取。

为了解决这个问题,我们可以使用模拟浏览器运行的方式,来做到在浏览器看到什么,抓取的源码就是什么,做到可见可爬。

而Seleniums是实现上述效果的理想工具,怎么理想?Selenium提供了很多交互方法,比如下拉,这个可以被应用在比如京东商品网页的抓取,当点击进去时,我们只能接收到30个商品的信息,如果你使用下拉按钮,你就可以获取到全部60个商品的信息,然后我们再抓取。

(一)简单的使用方法

from selenium import webdriver
from selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

将上面的Python语言脚本以名称为python_org_search的Python文件存储起来,然后在命令行运行(注:在我这里,因为Python是安装在anconda环境下的,所以用的是anconda的命令行界面)。

(二)解释上面的例子

selenium.webdriver模块提供所有网页驱动程序操作,目前支持的网页驱动程序是火狐浏览器,谷歌浏览器,IE浏览器,微软的远程驱动程序。

Keys类提供一些和键盘相同的功能,如RETURN,F1,ALT等等。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

接下来我们创造一个谷歌浏览器的实例

driver = webdriver.Chrome()

driver.get方法以URL作为参数,将导航到这个URL所定位的网页。WebDriver将等待网页所有的元素加载完毕才执行后面的操作(这是因为WebDriver内置一个“onload”功能),这些操作比如去定位一个元素。但值得注意的是,如果你想登陆的网页使用异步加载的方式,WebDriver并不知道何时将此网页的所有元素完全加载出来了。

driver.get("http://www.python.org")

j接下来的操作是:用一个断言来确认返回网页的名称中有Python这个单词。

assert "Python" in driver.title

WebDriver提供多种方法去在网页中找到元素,这些方法统一的表达式为:find_element_by_*。比如,你想找到网页中表输入文本的元素,你可以找到这个这个元素的name值,使用find_element_by_name方法。如果你想了解关于寻找元素的更多细节,你可以参考下面这个链接,或者你也可以关注我,后面我会以网络爬虫实战为载体,介绍更多寻找元素的方法。

elem = driver.find_element_by_name("q")

接下来,我们将向这个表输入文本的元素发送文本,这类似与我们使用键盘输入文本,然后摁确认键。但对于Python的selenium接口来说,可以使用从selenium.webdriver.common.keys导入的Keys类发送特殊文本。不过,为了不影响我们的输入结果,我们得先把这个元素的文本清空。

elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)

提交了搜索文本之后,如果有的话,我们是可以得到搜索结果的。但为了确保得到我们想要的搜索结果,我们可以使用下列断言:

assert "No results found." not in driver.page_source

最后,关闭浏览器的网页。你可以调用quit方法而不是close方法。quit方法将把所有的页面关闭,而close只关闭当前浏览页面。但如果浏览器只有一个网页被打开,那么两者就没有区别了。

driver.close()

(三)用Selenium去写测试脚本

Selenium主要用于编写测试用例。 Selenium包本身不提供测试工具/框架。 你可以使用Python的unittest模块编写测试用例。 工具/框架的其他选项是py.test等。

在本章,我们将使用unittest作为选择的框架。这是使用unittest模块修改后的示例。这是对http://python.org搜索功能的测试。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keysclass PythonOrgSearch(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()def test_search_in_python_org(self):driver = self.driverdriver.get("http://www.python.org")self.assertIn("Python", driver.title)elem = driver.find_element_by_name("q")elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_sourcedef tearDown(self):self.driver.close()if __name__ == "__main__":unittest.main()

你可以再次使用命令行界面去运行这个测试程序,将返回以下结果:

python test_python_org_search.py
.
----------------------------------------------------------------------
Ran 1 test in 15.566sOK

这个结果表示这个测试程序被成功执行了。

(四)解释上面的示例

最初,所有必需的基本模块都已导入。 unittest模块是基于Java的JUnit的内置Python。 该模块提供了组织测试用例的框架。 selenium.webdriver模块提供所有WebDriver实现。 当前支持的WebDriver实现是Firefox,Chrome,IE和Remote。 Keys类提供键盘中的键,如RETURN,F1,ALT等。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

测试用例类继承自unittest.TestCae类。继承自TestCase类旨在告诉uniitest模块这是一个测试用例。

class PythonOrgSearch(unittest.TestCase):

setUp方法是初始化的一部分,此方法将要在此测试用例类中编写的每个测试函数之前调用。 在这里,你将创建Chrome WebDriver的实例。

def setUp(self):self.driver = webdriver.Firefox()

接下来是测试用例方法。测试用例方法应始终以字符测试开始。 此方法内的第一行创建对在setUp方法中创建的驱动程序对象进行本地引用。

def test_search_in_python_org(self):driver = self.driver

driver.get方法将导航到URL给定的页面。 WebDriver将等待页面完全加载(即,已触发“ onload”事件),然后再将控制权返回给测试或脚本。 值得注意的是,如果您的页面在加载时使用了大量的异步加载方式,则WebDriver可能不知道何时完全加载。

driver.get("http://www.python.org")

下一行是一个断言操作,以确认网页标题中包含“ Python”一词:

self.assertIn("Python", driver.title)

WebDriver提供多种方法去在网页中找到元素,这些方法统一的表达式为:find_element_by_*。比如,你想找到网页中表输入文本的元素,你可以找到这个这个元素的name值,使用find_element_by_name方法。如果你想了解关于寻找元素的更多细节,你可以参考下面这个链接,或者你也可以关注我,后面我会以网络爬虫实战为载体,介绍更多寻找元素的方法。

elem = driver.find_element_by_name("q")

接下来,我们将向这个表输入文本的元素发送文本,这类似与我们使用键盘输入文本,然后摁确认键。对于Python的selenium接口来说,可以使用从selenium.webdriver.common.keys导入的Keys类发送特殊文本。

elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)

提交了搜索文本之后,如果有的话,我们是可以得到搜索结果的。但为了确保得到我们想要的搜索结果,我们可以使用下列断言:

assert "No results found." not in driver.page_source

在用尽每个测试方法后,我们将调用tearDown方法,以用来关闭在浏览器打开的页面。你可以调用quit方法而不是close方法。quit方法将把所有的页面关闭,而close只关闭当前浏览页面。但如果浏览器只有一个网页被打开,那么两者就没有区别了。

def tearDown(self):self.driver.close()

这个脚本中的最后两行是程序的入口。

if __name__ == "__main__":unittest.main()

(五)使用remote浏览器程序

要使用远程WebDriver,你应该先运行Selenium服务器。 而要运行服务器,请使用以下命令:

java -jar selenium-server-standalone-2.x.x.jar

当运行Selenium服务器时,此服务器将返回下列信息。

15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub

上一行显示:可以使用此URL连接到远程WebDriver。 这里有些例子:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities=DesiredCapabilities.CHROME)driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities=DesiredCapabilities.OPERA)driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)

desired_capabilities的数据结果是字典:

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities={'browserName': 'htmlunit','version': '2','javascriptEnabled': True})

转载请注明出处!!!

码字不易,你的点赞将是我继续翻译Python库的动力!!!

selenium 控制ie_Python爬虫---Selenium的简单介绍相关推荐

  1. 首次使用Selenium控制谷歌浏览器,进行一些简单自动化操作

    先附上官网链接selenium和文档链接 官网的介绍和例子比较简单易上手,可以参考官方文档进行学习. 介绍 Selenium 是一系列工具和库的综合项目,这些工具和库支持 web 浏览器的自动化. S ...

  2. golang爬虫框架colly简单介绍

    colly一款快速优雅的golang爬虫框架,简单易用,功能完备. colly 官网地址:http://go-colly.org/ colly github地址:github.com/gocolly/ ...

  3. python爬虫selenium和bs4_python爬虫――selenium+bs4爬取选股宝‘利好‘or’利空'股票信息...

    一.前言.(1)我个人比较喜欢先看结果,再看内容,so,结果如图: (2)信息抓取自选股宝https://xuangubao.cn/(我这里设定抓取加载20页,下面只列举几个): (3)本次主要应用到 ...

  4. 查看网站的爬虫协议,简单介绍爬虫协议robots.txt,避免爬虫爬的好,牢饭吃得早(保姆级图文)

    目录 什么是爬虫协议 查询方法 解读协议内容 总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 什么是爬虫协议 正经正规网站一般都会有设置爬虫协议,规定 ...

  5. Python爬虫-Selenium(1)

    Python爬虫-Selenium(1) @(博客)[python, 爬虫, selenium, Python] Python爬虫-Selenium(1) 前言 前期准备 基础使用 进阶使用 浏览器操 ...

  6. Python爬虫神器简单介绍与使用(requests、Beautiful Soup、selenium等)

    目录 一.requests 1.1.介绍 1.2.requests案例 二.BeautifulSoup 2.1.介绍 2.2.安装 2.3.BeautifulSoup案例 三.selenium 3.1 ...

  7. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  8. Python爬虫 Selenium实现自动登录163邮箱和Locating Elements介绍

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  9. [Python爬虫] Selenium实现自己主动登录163邮箱和Locating Elements介绍

            前三篇文章介绍了安装过程和通过Selenium实现訪问Firefox浏览器并自己主动搜索"Eastmount"keyword及截图的功能.而这篇文章主要简介怎样实现 ...

最新文章

  1. python的断点调试
  2. java地图 热力图,腾讯地图数据可视化之热力图
  3. 权限验证框架Shiro
  4. python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...
  5. 移动端页面按手机屏幕分辨率自动缩放的js
  6. android imageview图片旋转动画,Android 安卓动画 属性动画 - 旋转动画
  7. Heap:Sunscreen(POJ 3614)
  8. 同一张表sql省市区三级联动查询
  9. java excel 加边框_java通过poi来设置表格边框
  10. python爬京东联盟_PHP调用京东联盟开普勒、宙斯API模板
  11. 云计算发展趋势都有哪些 如何快速入行云计算
  12. 成都链安预警:eos竞猜游戏FASTWIN遭黑客攻击 损失近700eos
  13. java在线答题系统,上岸蚂蚁金服!
  14. sql server数据库练习
  15. 线性表(1)普通线性表
  16. Cesium交流群链接
  17. 阿里电商故障治理和故障演练实践
  18. 幼儿园的计算机一年级的教案,一年级活动教案
  19. Corechips SL2.2S USB2.0 4口 Hub 集成电路
  20. 无法访问网上邻居解决方法

热门文章

  1. NVIDIA Tesla K40C 和 AMD Firepro W8100 的对比
  2. 使用 systemd 定时器调度任务
  3. LLVM 核心类简明示例
  4. Linux内存管理:MMU那些事儿
  5. KR C与ANSI C
  6. C语言串 typedef char String[MaxLength + 1]
  7. 同济大学转计算机专业绩点,关于同济大学研究生成绩计算方法的说明
  8. pca降维的基本思想_百面机器学习 第四章 降维 PCA
  9. echart 三维可视化地图_Echarts百度可视化图形库
  10. python中headers的作用_爬虫入门到精通-headers的详细讲解(模拟登录知乎)