Selenium模拟浏览器初识

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px "PingFang SC Semibold" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.4px "PingFang SC Semibold" }
span.s1 { font: 21.0px "PingFang SC" }
span.s2 { }
span.s3 { font: 16.4px "PingFang SC" }

Seleniumd介绍

在写Python爬虫的时候,最麻烦的不是那些海量的静态网站,而是那些通过JavaScript获取数据的站点。Python本身对js的支持不好,所以就有良心的开发者来做贡献了,这就是Selenium,他本身可以模拟真实的浏览器,浏览器所具有的功能他都有哦,加载js更是小菜了。

Selenium的安装:

使用pip命令,你可以像下面这样安装 selenium:

pip install selenium

大家可以参考一下中文文档

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.4px "PingFang SC Semibold" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
span.s1 { font: 16.4px "PingFang SC" }
span.s2 { }

浏览器的选择:

在写爬虫的时候,用到最多的就是Selenium的Webdriver,当然,webdriver也不可能支持所有的浏览器,让我们看看他支持哪些浏览器吧:

 1 from selenium import webdriver
 2 help(webdriver)
 3
 4 PACKAGE CONTENTS
 5     android (package)
 6     blackberry (package)
 7     chrome (package)
 8     common (package)
 9     edge (package)
10     firefox (package)
11     ie (package)
12     opera (package)
13     phantomjs (package)
14     remote (package)
15     safari (package)
16     support (package)
17     

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC Semibold" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.4px "PingFang SC Semibold" }
span.s1 { }
span.s2 { font: 14.0px "PingFang SC" }
span.s3 { font: 16.4px "PingFang SC" }

可以看出支持的浏览器还是比较丰富的,移动端到电脑端应由具有。

然而,个人觉得在写爬虫的时候,更推荐使用PhantomJS:

PhantomJS介绍:

(1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

(2)提供JavaScript API接口,即通过编写Js程序可以直接与webkit内核交互,在此之上可以结合Java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。

(3)提供windows、Linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。

PhantomJS全面支持各种原生的Web标准:DOM处理、CSS选择器、JSON、Canvas和SVG。最重要的是他是一个没有GUI的程序,也就意味着他可以省去大量的加载图形界面的时间。有人曾经测试过,使用Selenium模块调用上述浏览器,PhantomJS的速度是第一名哦~~~~~第二和第三是chrome和ie。

PhantomJS的安装:

这里有一点要说明,PhantomJS并不是一个Python模块,他是一个独立的,第三方软件,这也就意味着我们不能简单的使用pip工具安装啦。

Mac下安装PhantomJS:

这里我们只要使用brew工具就能安装上PhantomJs了

brew install phantomjs

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC Semibold" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
span.s1 { font: 14.0px "PingFang SC" }
span.s2 { }

linux下安装PhantomJS:

linux下有很多第三方发型版本:比较常用的一般是 Ubuntu、centos等等。这些发行版也都有自己强大的软件管理仓库:apt、yum等等

那么安装起来也就超方便了:

# ubuntu
apt-get install phantomjs

# centos
yum install phantomjs

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC Semibold" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 21.0px "PingFang SC Semibold" }
span.s1 { font: 14.0px "PingFang SC" }
span.s2 { }
span.s3 { text-decoration: underline; color: #0000ee }
span.s4 { font: 21.0px "PingFang SC" }

win下安装PhantomJS:

虽然win下没有上述的方便的安装方式,但是我们可以去官网下载安装包,然后在安装,地址在这里:Download | PhantomJS

使用Selenium&PhantomJS抓取数据:

下面我们介绍一个简单到抓取百度的例子

1 from selenium import webdriver
2 #我们首先导入了Selenium里的webdriver,
3 browser = webdriver.PhantomJS()
4 #然后建立一个PhantomJS的浏览器对象,
5 url = ‘https://www.baidu.com‘
6 browser.get(url)
7 #最后我们通过get方法,打开了百度的首页。
8 browser.implicitly_wait(3)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC Semibold" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.7px "PingFang SC Semibold" }
span.s1 { font: 14.0px "PingFang SC" }
span.s2 { }
span.s3 { font: 18.7px "PingFang SC" }

这里要说一下 implicitly_wait():

浏览器解释JS脚本是需要时间的,但实际上这个时间并不好确定,如果我们手动设定时间间隔的话,设置多了浪费时间,设置少了又会丢失数据implictly_wait函数则完美解决了这个问题,给他一个时间参数,他会只能等待,当js完全解释完毕就会自动执行下一步。

找到搜索框和搜索按钮:

在第一步的时候,我们其实就已经把百度首页的数据爬到本地了,剩下当然是数据的筛选,这里推荐用Selenium自带函数来完成,Selenium 本身给出了相关函数来定位有效数据的位置。

# 找到第一个匹配的元素
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

# 一次查找多个元素 (这些方法会返回一个list列表):
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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
span.s1 { }

相信之前学习了bs4和Xpath之后,用这个完全没有什么压力吧,看函数名就应该知道是具体通过什么来定位数据了。上面我们只是打开了百度而已,在使用真实浏览器的时候是不是要先在文本框里输入关键词然后在按搜索按钮呢?

在PhantomJS里我们也需要这样做:

 1 text = browser.find_element_by_id(‘kw‘)
 2 #首先调用find_element_by_id()方法找到了text栏的位置,
 3
 4 text.clear()
 5
 6 text.send_keys(‘python‘)
 7 #然后通过send_keys()方法来输入关键字
 8
 9 print(browser.title)
10 #输出:百度一下,你就知道
11
12 button = browser.find_element_by_id(‘su‘)
13 #接着还是通过find_element_by_id()方法找到提按钮,
14
15 button.submit()
16 #最后我们通过.submint()方法来模拟点击,发送搜索请求

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
span.s1 { }

用chrome开发者工具可以快速定位到各个element的位置:

筛选答案

1 results = browser.find_elements_by_class_name(‘t‘)
2 #通过browser.find_elements_by_class_name()方法定位到搜索结果,返回一个element类型的列表
3 #再通过element.text 和 element.get_attribute()方法来获取我们需要的数据。
4 for result in results:
5     print(‘标题:{} 超链接:{}‘.format(result.text,result.find_element_by_tag_name(‘a‘).get_attribute(‘href‘)))

下面看一下运行结果

1 标题:Welcome to Python.org官网 超链接:http://www.baidu.com/link?url=nLxm0hnvH9HcezbpHRuDVS5BVAyuR91xzNhFE4Qy9_a
2 标题:Python_百度百科 超链接:http://www.baidu.com/link?url=jUTKRqQ91sf2liPtZlVHVr82UNuP12PPKdll2ZNQ9-kifb4GeLDG3SlV9NuCvI2BWUSqG8coNRzsYvlYusYuJK
3 标题:Download Python | Python.org 超链接:http://www.baidu.com/link?url=PP6oQw_LHvRmuc8wl4c-BFn_GouagfYU-IY0HqdUF88ikq5zriz1JNManttiFFuX
4 标题:Python教程 - 廖雪峰的官方网站 超链接:http://www.baidu.com/link?url=89Q6mTNkcq1NdeDubb3jgq0Du3OX8hUcNt90fyhJ6nMWXfAPyJUZ7Vg-b9CSpaxdpOxGErzWzASuq4E96mHnxlZsLi6wieiEqtEk8UsJqjnfeWfhrLz_lWrtuPkWjXAo
5 标题:Mac版 Python最新官方版下载_百度软件中心 超链接:http://www.baidu.com/link?url=xkHduP0KLXEL1jvFt2ftD8LXgRG0gBop2ojePLkZr5s7WvcBZ1nYxU2sPjedwQGabjC_v89VUoYuKSzy8aI-Ja
6 标题:python吧_百度贴吧 超链接:http://www.baidu.com/link?url=N5vRlEUf6OWIyclfhkWz5r38A-kUhT40K7VTNIwLdR3zwNF8hFKbtsQtaRbCa_p0uPPwFaKRgMN0zvgvTMm6rK
7 标题:玩蛇网 - Python教程学习与Python资源分享平台 超链接:http://www.baidu.com/link?url=0AK0LLSw35u5qIfXy7O9n3AcgWy8A4MaR55Ia2LyVQjmxivy_Q_UY_khKCWJp7iG
8 标题:Python教程_百度文库 超链接:http://www.baidu.com/link?url=okXMxRDGk1j6Ni5Il_hwNz8RC7C79XtAo76NptBIUF-GNvEKwpR-vKCAjY9DrBugt2pFZ87UiLlKcrhdgNsGjQwdLXbPc36ACgSok0PEKOq
9 标题:Python - 伯乐在线 超链接:http://www.baidu.com/link?url=kBa0MYj70CsPtPIpCikAxJJol_b_JHtSGD9iot7-hrX2eBNH_WW2r-PoaJf_nFhp
时间: 2024-09-30 10:15:13

Selenium模拟浏览器初识的相关文章

python下selenium模拟浏览器基础操作

1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/geckodriver/releases Chromedriver下载:http://npm.taobao.org/mirrors/chromedriver/ 2.保存路径 将下载好的geckodriver以及Chromedriver解压到桌面,打开我的电脑,找到Python文件夹中anancode文件

使用selenium模拟浏览器抓取淘宝信息

通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中. from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdri

使用Selenium模拟浏览器抓取淘宝商品美食信息

淘宝页面比较复杂,含有各种请求参数和加密参数,如果直接请求或者分析Ajax将会非常繁琐.Selenium是一个自动化测试工具,可以驱动浏览器去完成各种工作,比如模拟点击.输入和下拉等多种功能,这样我们只需关心操作,不需要关心后台发生了怎么样的请求下面对具体操作步骤进行详述. 创建webdriver对象 #创建一个WebDriver对象 from Selenium import webdriver browser = webdriver.Chrome() 大多数网络应用程序都使用AJAX技术.当浏

爬虫实战--使用Selenium模拟浏览器抓取淘宝商品美食信息

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as E

9、使用selenium + phantomjs 模拟浏览器登录网站

''' Selenium 模拟浏览器爬取网页信息 一种是真实的浏览器,也即是在程序调用浏览器时,会打开相应的浏览器来显示, 如:chrome,ie,safari,firefox 一种是伪浏览器,没有浏览器界面,只负责处理html,js和cookie的功能. 如:htmlunit,phantomjs 使用示例 ''' #author toloy from selenium import webdriver # driver = webdriver.Chrome("C:\Program Files

爬虫-使用模拟浏览器操作(截取网页)

最近遇到一个问题就是,如何模拟真实浏览器行为然后截取显示的网页. 方案 模拟登陆网站或者直接使用cookie登陆. 对指定页面按钮进行点击刷新页面,截取网页. 我们使用selenium库来操作浏览器驱动,即执行浏览器相应的驱动命令,实现相应的浏览器操作. 准备工作 selenium库 浏览器自动化测试框架,其作用是通过操作浏览器驱动来控制浏览器行为,达到模拟真实用户操作浏览器的效果.原理为自动化测试python脚本-->浏览器driver -->浏览器.官网 python中文文档 python

Python模拟浏览器实现用户响应

最近工作中遇到一个问题,在集群上运行的任务有时候无法正常结束,或者无法正常启动.这会造成这批运行的任务无法正常结束运行,处于pending的状态,导致后面的任务无法正常启动. 该问题困扰我们项目已经有半年左右了,一直没有想到很好的解决办法.主要原因就是任务的状态只能在浏览器中看出,无法通过后台的日志或者数据库查询得到.在浏览器中,如果我们看到某个任务长时间没有运行时间和状态的变化,就可以把这个任务当做是“僵尸”任务,从而可以将该任务手动结束掉(kill). 春节之后在网上看到一些有关爬虫的文章,

Selenium Python浏览器调用:伪浏览器

WebDriver驱动介绍 因为移动端的driver目前没有接触,所以主要介绍PC端driver,PC端的driver都是基于浏览器的,主要分为2种类型: 一种是真实的浏览器driver:safari.firefox.ie.chrome等 比如:safari.firefox.ie.chrome都是通过浏览器原生组件来调用浏览器的原生API,这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用. 一种是伪浏览器dri

splinter python浏览器自动化操作,模拟浏览器的行为

Splinter可以非常棒的模拟浏览器的行为,Splinter提供了丰富的API,可以获取页面的信息判断当前的行为所产生的结果 最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没有更新了.还 有就是利用selenium,可支持多种浏览器.网上资料比较多.经过比较,我选择了Splinter模块,因为利用Splinter开发浏览器自动化操 作,编写代码比较简单. 一.Splinter的安装 Splinter的使用必修依