Python爬虫学习(9):Selenium的使用

1 简介以及安装

  Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。Selenium支持多种语言开发,比如 Java,C,Ruby等等,有 Python 吗?那是必须的!哦这可真是天大的好消息啊。

  Selenium 2,又名 WebDriver,它的主要新功能是集成了 Selenium 1.0 以及 WebDriver(WebDriver 曾经是 Selenium 的竞争对手)。也就是说 Selenium 2 是 Selenium 和 WebDriver 两个项目的合并,即 Selenium 2 兼容 Selenium,它既支持 Selenium API 也支持 WebDriver API。

  安装:如果已经安装了pip,则可以直接通过它安装:

 pip install selenium

  文档: http://selenium-python.readthedocs.io/

2. 简单使用

  2.1 打开浏览器

#!/usr/bin/python

from selenium import webdriver

browser=webdriver.Firefox()
browser.get("http://www.baidu.com")

  报错:

selenium.common.exceptions.WebDriverException: Message: ‘geckodriver‘ executable may have wrong permissions. 

  程序执行错误,浏览器没有打开,那么应该是没有把 Firefox 驱动没有配置在环境变量里。下载驱动,然后将驱动文件路径配置在环境变量即可。

  下载地址:https://github.com/mozilla/geckodriver/releases/

  下载完成后将其加压到/usr/local/bin目录中,然后再在执行,我们看到直接就弹出浏览器并且其页面是百度。

  2.2 发送数据

  为了交互方便,就直接用ipython来进行下边的操作.。(如果没有,在centos7中可以直接安装:sudo yum install ipython)。
  安装完成后就可以直接在命令中输入ipython启动ipython,然后就可以在其中输入python语句,并且带有tab补全功能。下边示例就是打开firefox

  

  依次执行以下语:

In [1]: from selenium import webdriver

In [2]: from selenium.webdriver.common.keys import Keys
# 打开浏览器
In [3]: browser = webdriver.Firefox()
# 其中 driver.get 方法会打开请求的URL,WebDriver 会等待页面完全加载完成之后才会返回,# 即程序会等待页面的所有内容加载完成,JS渲染完毕之后才继续往下执行。# 注意:如果这里用到了特别多的 Ajax 的话,程序可能不知道是否已经完全加载完毕。
In [4]: browser.get("http://www.baidu.com")

  然后我们通过firebug(firefox 中按F12),找出百度的输入框的名称。发现输入框的名称为: wd

  

  接下来,我们通过selenium在这个输入框中输入值:

#通过元素名称找到页面输入框
In [5]: elem = browser.find_element_by_name("wd")
#在输入框中输入查询内容
In [6]: elem.send_keys("selenium")

  这时我们发现在页面中已经出现了查询值:

  

  接着可以通过发送向下箭头指示让其在上述的选项中选择:

  

elem.send_keys(Keys.ARROW_DOWN)

  然后我们可以通过selenium输入一个回车进行查询,结果可以直接在浏览器中查看。(是不是感觉很强大,通过语句操作浏览器)

In [7]: elem.send_keys(Keys.RETURN)

  之后我们可以通过browser.page_source获得渲染后的页面

3. 交互

  在前边的2.2部分已经说明一部分关于交互的使用。这里将更进一步说明。

  3.1 元素的获取

  当有如下定义的元素的时候:

<input type="text" name="passwd" id="passwd-id" />

  我们可以通过以下几种方式定位到这个元素:

# 通过元素ID获取此元素
element = driver.find_element_by_id("passwd-id")
# 通过元素的名称获取元素
element = driver.find_element_by_name("passwd")
# 通过xpath获取元素
element = driver.find_element_by_xpath("//input[@id=‘passwd-id‘]")
# 通过标签名获取元素element = driver.find_element_by_tag_name。。其它

  注意:如果没有找到相应的元素的时候,会抛出NoSuchElementException异常。获取到的元素都用一个类表示,这就意味着,如果你用IDE的时候,给你自动提示很多的方法中不是每一个都能调用的。

  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历,也可以在HTML中使用,xpath的知识点不多,如果要学习,请点击下边的地址:

  XPath 教程

  3.2 选择

   前边我们已经成功获取并进入到文本框中,现在我们来操作以下其它的元素。比如我们要出发下拉框,我们可以这样做:

# 获取下拉的元素
element = driver.find_element_by_xpath("//select[@name=‘name‘]")
# 获取下拉中的所有选项
all_options = element.find_elements_by_tag_name("option")
# 便利所有的选项,输出其值,并点击每一个选项
for option in all_options:
    print("Value is: %s" % option.get_attribute("value"))
    option.click()

  当然上述不是最有效的方式,selenium提供一个类用于处理这种Slelect元素。以下方法可以凭借其方法名理解其有何用。也可以借助ipython中的help()来查看某个方法的作用以及其详细使用方法。

from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name(‘name‘))
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value(value)

   试想以下,我们可能拿selenium来做测试,可能需要对所有的选项都要测试,下边就可以获取素有的选项:

select = Select(driver.find_element_by_xpath("xpath"))
all_selected_options = select.all_selected_options

  3.3 提交

  当你填写完成form表单之后,你会通过submit来提交表单。其中的一种方法是通过找到submit按钮,然后让你响应点击。

# 假设你的submit的id为ok
driver.find_element_by_id("ok").click()

  selenium提供了一个方便的submit()方法,当你通过表单元素调用submit()方法的时候就可以完成提交。

element.submit()

  3.4 拖拽

  你可以移动某个元素一定的距离,也可以将一个元素移动到另一个元素中去。

from selenium.webdriver import ActionChains
element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()

  3.5

    

  

  

  

  

时间: 2024-11-03 01:17:36

Python爬虫学习(9):Selenium的使用的相关文章

Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.whl (931kB) 100% |████████████████████████████████| 942kB 573kB/s Installing collected packages: selenium Successfully installed selenium-3.4.1 2.安装phan

Python爬虫学习系列教程

Python爬虫学习系列教程 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己实际写的一些小爬虫,在这里跟大家一同分享,希望对Python爬虫感兴趣的童鞋有帮助,如果有机会期待与大家的交流. Python版本:2.7 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库

Python爬虫学习路线,强烈建议收藏这十一条

(一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础:Python 简介 | 菜鸟教程 2.看完基础后,就是做一些小项目巩固基础,比方说:做一个终端计算器,如果实在找不到什么练手项目,可以在 Codecademy - learn to code, interactively, for free 上面进行练习. 如果时间充裕的

Python爬虫学习:四、headers和data的获取

之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.com/ 打开网页,按下F12键,如下图所示: 点击下方标签中的Network,如下: 之后再点击下图所示位置: 找到红色下划线位置所示的标签并点击,在右边的显示内容中可以查看到所需要的headers信息. 一般只需要添加User-Agent这一信息就足够了,headers同样也是字典类型: user

Python爬虫学习:三、爬虫的基本操作流程

本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap

2018/7/21 Python 爬虫学习

2018/7/21,这几天整理出来的一些Python 爬虫学习代码. import urllib2 response = urllib2.urlopen("http://baidu.com") html = response.read() print html 进一步,可以request import urllib2 req = urllib2.Request("http://www.baidu.com") response = urllib2.urlopen(re

Python爬虫学习(10):Selenium的好基友PhantomJS

上一节中我们学习了selenium,用python来操作浏览器,在做网页自动化测试的时候最好不过了 .如果我们来做爬虫用一个带界面的浏览器似乎不太好吧,那可咋办呢?别着急,下来我们要介绍的就是一款不带界面的浏览器--PhantomJS.其是一个无界面的,可脚本编程的WebKit浏览器引擎,支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG. 这里可能会有人问:为什么要用浏览器来抓取页面数据,不用之前我们之前直接通过Urllib获取网页然后分析呢? 这是因为我们通

Python爬虫利器:Selenium的用法

本文和大家分享的主要是python 爬虫 利器Selenium的相关内容,一起来看看吧,希望对大家 学习python爬虫有所帮助. Selenium  是什么?一句话,自动化测试工具.它支持各种浏览器,包括  Chrome , Safari , Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个  Selenium  的插件,那么便可以方便地实现 Web界面的测试.换句话说叫  Selenium  支持这些浏览器驱动.话说回来, PhantomJS 不也是一个浏览器吗,那么  S

[python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对比,你可以进一步加深Python爬虫的印象.同时,文章给出了我以前关于爬虫的基础知识介绍,方便新手进行学习.        总之,希望文章对你有所帮助,如果存在不错或者错误的地方,还请海涵~ 一. DOM树结构分析 豆瓣Top250电影网址:https://movie.douban.com/top2

开始我的Python爬虫学习之路

因为工作需要经常收集一些数据,我就想通过学爬虫来实现自动化完成比较重复的任务. 目前我Python的状况,跟着敲了几个教程,也算是懂点基础,具体比较深入的知识,是打算从做项目中慢慢去了解学习. 我是觉得如果一开始就钻细节的话,是很容易受到打击而放弃的,做点小项目让自己获得点成就感路才更容易更有信心走下去. 反正遇到不懂的就多查多问就对了. 知乎上看了很多关于入门Python爬虫的问答,给自己总结出了大概的学习方向. 基础: HTML&CSS,JOSN,HTTP协议(这些要了解,不太需要精通) R