python 下用selenium phantomjs打开phantomjs出错,请问如何处理

python+selenium+phantomjs抓取ajax动态页面 |
一般情况下,python爬虫遇到ajax动态页面一般都是直接分析后模拟ajax请求获得数据。不过今天遇到个网站,由于某些原因不透露网址了,点击搜索按钮后,它先跳转到a页面,然后从a页面跳转到b页面,再由b页面跳回a页面。当完成这2次跳转后,ajax向a页面提交的请求才会返回结果。
也怀疑是不是cookie或者refenen的问题,但最终证实不是因为这个。即便伪造了请求头再访问a页面,返回的也不是真实的结果页面而是一段跳转到b页面的js代码。
既然不知道跳转过程中网站到底干了写什么,那就直接上大杀器吧。
phantomjs可以简单的理解为js解释器,selenium更不用多介绍了,用pip安装即可。
从http://phantomjs.org/download.html下载编译后的包(当然你可以自己下源码),解压后的bin目录中就是我们需要的东西。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
from mon.desired_capabilities import DesiredCapabilities
import time
if __name__ == "__main__":
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.resourceTimeout"] = 5
dcap["phantomjs.page.settings.loadImages"] = False
# 伪造ua信息
dcap["phantomjs.page.settings.userAgent"] = ("myua")
# 添加头文件
# dcap["phantomjs.page.customHeaders.Referer"] = (
service_args = [
'--proxy=127.0.0.1:8080',
#'--proxy-type=http',
#'--proxy-type=socks5',
#'--proxy-auth=username:password'
driver = webdriver.PhantomJS(
executable_path='./phantomjs',
service_args=service_args,
desired_capabilities=dcap
driver.get("/")
driver.find_element_by_id('kw').send_keys("xxx") #模仿填写搜索内容
driver.find_element_by_id("btn_ci").click() #模仿点击搜索按钮
time.sleep(7)#等待页面加载
page = driver.page_source
open("res.html","w").write(page)
driver.quit()
12345678910111213141516171819202122232425262728293031323334353637383940
import sysreload(sys)sys.setdefaultencoding('utf-8')&from selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesimport time&if __name__ == "__main__":
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.resourceTimeout"] = 5
dcap["phantomjs.page.settings.loadImages"] = False
# 伪造ua信息
dcap["phantomjs.page.settings.userAgent"] = ("myua")
&&&&# 添加头文件
# dcap["phantomjs.page.customHeaders.Referer"] = (
service_args = [
'--proxy=127.0.0.1:8080',
#'--proxy-type=http',
#'--proxy-type=socks5',
#'--proxy-auth=username:password'
driver = webdriver.PhantomJS(
executable_path='./phantomjs',
service_args=service_args,
desired_capabilities=dcap
)&&&&driver.get("/")&&&&driver.find_element_by_id('kw').send_keys("xxx") #模仿填写搜索内容&&&&driver.find_element_by_id("btn_ci").click() #模仿点击搜索按钮&&&&time.sleep(7)#等待页面加载&&&&page = driver.page_source&&&&open("res.html","w").write(page)&&&&driver.quit()
其中,我的源码直接放在了bin目录,所以executable_path直接指向当前目录,find_element_by_id这个查看目标网站源码就能知道,sleep的时间也要根据实际情况修改。这里也可以使用driver.implicitly_wait(30),不过这个网站的数据id都是随机生成的,所以我直接使用sleep了。
参考网站:
http://phantomjs.org/quick-start.html
http://blog.chinaunix.net/uid--id-3692113.html
http://blog.csdn.net/xiaoyao3857/article/details/9180989
/blog/python/headless-selenium-testing-with-python-and-phantomjs/
Post navigation
2016年四月
11121314151617
18192021222324
252627282930
看一看&如何通过 python,selenium,PhantomJS 提取网页图片或其他资源? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
Sponsored by
国内领先的实时后端云野狗 API 可用于开发即时聊天、网络游戏、实时定位等实时场景传输快!响应快!入门快!
Promoted by
如何通过 python,selenium,PhantomJS 提取网页图片或其他资源?
11:46:37 +08:00 · 2405 次点击
PhantomJS是一个headless无窗口浏览器selenium可以进行网页自动化假如说我通过PhantomJS去访问一个网页,怎么把网页中的图片都导出来了?查了半天,能找到PhantomJS的缓存目录(比如我的是c:\Users\admin\AppData\Local\Ofi Labs\PhantomJS\),但里面没有图片,只有一些localstorage文件
1 回复 &| &直到
08:00:00 +08:00
& & 16:59:04 +08:00
用netsniff获取图片链接自己下载。
& · & 1645 人在线 & 最高记录 1847 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 45ms · UTC 01:46 · PVG 09:46 · LAX 18:46 · JFK 21:46? Do have faith in what you're doing.Python爬虫 在Windows下安装PIP+Phantomjs+Selenium
& & & & 最近准备深入学习Python相关的爬虫知识了,如果说在使用Python爬取相对正规的网页使用&urllib2 + BeautifulSoup + 正则表达式&就能搞定的话;那么动态生成的信息页面,如Ajax、JavaScript等就需要通过&Phantomjs
+&CasperJS +&Selenium&来实现了。所以先从安装和功能介绍入门,后面在介绍一些Python相关的爬虫应用。
& & & &PhantomJS
& & & &&PhantomJS是一个服务器端的 JavaScript API 的WebKit(开源的浏览器引擎)。其支持各种Web标准:
DOM 处理, CSS 选择器, JSON, Canvas 和 SVG。PhantomJS可以用于页面自动化,网络监测,网页截屏,以及无界面测试等。
& & & &&Selenium
& & & & Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性、测试系统功能,它ThoughtWorks专门为Web应用程序编写的一个验收测试工具。
& & & &PIP
& & & & 在介绍介绍它们之前,需要安装PIP软件。正如xifeijian大神所说:“作为Python爱好者,如果不知道easy_install或者pip中的任何一个的话,那么......”。
& & & &&easy_insall的作用和perl中的cpan,ruby中的gem类似,都提供了在线一键安装模块的傻瓜方便方式,而pip是easy_install的改进版,提供更好的提示信息,删除package等功能。老版本的python中只有easy_install,没有pip。常见的具体用法如下:
easy_install的用法:
1) 安装一个包
$ easy_install &package_name&
$ easy_install &&package_name&==&version&&
2) 升级一个包
$ easy_install -U &&package_name&&=&version&&
1) 安装一个包
$ pip install &package_name&
$ pip install &package_name&==&version&
2) 升级一个包 (如果不提供version号,升级到最新版本)
$ pip install --upgrade &package_name&&=&version&
3)删除一个包
$ pip uninstall &package_name&
二. 安装PIP
& & & &&第一步:下载PIP软件
& & & & 可以在官网http://pypi.python.org/pypi/pip#downloads下载,同时cd切换到PIP目录,在通过python
setup.py install安装。而我采用的是下载pip-Win_1.7.exe进行安装,下载地址如下:
& & & &&/site/pydatalog/python/pip-for-windows
& & & &&第二步:安装PIP软件
& & & & 当提示&pip and virtualenv installed&表示安装成功,那怎么测试PIP安装成功呢?
& & & &&第三步:配置环境变量
& & & & 此时在cmd中输入pip指令会提示错误“不是内部或外部命令”。
& & & & 所以需要添加path环境变量。PIP安装完成后,会在Python安装目录下添加python\Scripts目录,即在python安装目录的Scripts目录下,将此目录加入环境变量中即可!过程如下:
& & & &&第四步:使用PIP命令
& & & & 下面在CMD中使用PIP命令,“pip list outdate”列举Python安装库的版本信息。
& & & &&PIP常用的命令如下所示:&(参考pip安装使用详解)
pip &command& [options]
按着一定格式输出已安装软件列表
列出已安装软件.
显示软件详细信息.
搜索软件,类似yum里的search.
Build wheels from your requirements.
不推荐. Zip individual packages.
不推荐. Unzip individual packages.
不推荐. Create pybundles.
General Options:
-h, --help
-v, --verbose
更多的输出,最多可以使用3次
-V, --version
现实版本信息然后退出.
-q, --quiet
最少的输出.
--log-file &path&
覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log
--log &path&
不覆盖记录verbose输出的日志.
--proxy &proxy&
Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout &sec&
连接超时时间 (默认15秒).
--exists-action &action&
默认活动当一个路径总是存在: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert &path&
三. 安装Phantomjs+Selenium
& & & & &通过pip命令安装Selenium:
& & & & 官网http://phantomjs.org/下载PhantomJS解压后如下图所示:
& & & & 调用时可能会报错“Unable to start phantomjs with ghostdriver”如图:
& & & & 此时可以设置下Phantomjs的路径,同时如果你配置了Scripts目录环境变量,可以解压Phantomjs到该文件夹下。
& & & & 参考:Selenium
with GhostDriver in Python on Windows - stackoverflow
四. 测试代码
& & & & 设置executable_path路径后的代码如下:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=&F:\Python\phantomjs-1.9.1-windows\phantomjs.exe&)
driver.get(&&)
data = driver.title
print data& & & & 运行结果如下图所示:
& & & & 获取&百度一下,你就知道&,对应HTML源码:
& & & & &title&百度一下,你就知道&/title&
& & & & 但是总会弹出PhantomJS的黑框,怎么办呢?同时如何通过Python直接调用Phantomjs运行JS呢?
& & & & 同时下面的代码可以进行截图:
from selenium import webdriver
driver=webdriver.PhantomJS(executable_path=&F:\Python\phantomjs-1.9.1-windows\phantomjs.exe&)
driver.get(&http://www.csdn.net&)
data = driver.title
driver.save_screenshot('csdn.png')
print data
& & & & 输出如下图所示,图片太长仅仅部分:&&&
CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台
& & & & PS:我准备使用C#调用PhantomJS.exe完成页面截图功能,但是没有成功,而且使用WebBrowser中DrawToBitmap函数获取图片,由于ActiveX 控件不支持DrawToBitmap方法,获取总是空白的,各种问题。
参考资料:
& & & &&数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置(强推)
& & & &&数据抓取的艺术(二):数据抓取程序优化
& & & &&Python使用Selenium/PhantomJS(强推)
& & & &&Python selenium的js扩展实现
& & & &&使用python+phantomjs抓取动态页面
& & & &&用phantomjs 进行网页整页截屏
& & & &&Selenium-webdriver系列教程(15)——万能的截图(强推)
& & & &&pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面
& & & &关于抓取网页源代码的问题
使用python/casperjs编写终极爬虫-客户端App的抓取
& & & &&Python 爬虫如何获取 JS 生成的 URL 和网页内容-知乎
& & & &&通过 WebBrowser 获取网页截图 - C#
& & & &&Control.DrawToBitmap 方法不支持Ajax - 官网
& & & &&IE浏览器整页截屏程序(二) - C#
& & & &&C# 网络编程之最简单浏览器实现 - 自己
& & & &&最后希望该篇基础性文章对你有所帮助吧!如果有不足之处,还请海涵~
& & & (By:Eastmount
晚上8点 &&http://blog.csdn.net/eastmount/)
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的&原图&等,此时尝试学习Phantomjs和CasperJS来解决这个问题.这第一篇文章当然就是安装过程及入门介绍. 一. 安装Phantomjs
下载地址:http://phant ...
pip is a tool for installing and managing Python packages, such as those found in the Python Package Index. It's a replacement for easy_install.
本部分介绍两个: 一.Python3.4.x下的pip 二.Pyt ...
1. 从这里下载 get-pip.py: /pypa/pip/master/contrib/get-pip.py 2. python get-pip.py,将安装pip和esay_install 4. 把python安装目录下的Scripts目录加入PATH. 就可以使用pip和easy_in ...
1.下载get-pip.py,可以右键另存为get-pip.py,然后以python脚本的方式使用python-2.7(windows应用程序)打开运行 2.可以在你的python安装目录下的script目录看到pip应用程序和easy_install应用程序 3.将pip应用程序加到path中(例如我的是:C:\Python27\Scripts
这两天刚开始学python,用的资料是Learn Python the Hard Way.学到Exercise 46: A Project Skeleton这一节,教程中需要安装4个软件(目前还不知道这些软件具体是做什么的). Install the following Python packages: pip from http://pypi.python ...
方式一.命令行中运行easy_instal twisted 提示&Unable to find vcvarsall.bat&的错误,这是因为twisted源代码安装方式,需要C编译环境,如果有安装vc开发环境就可以通过 也可以下载MinGW的来编译,方法 首先安装MinGW,在MinGW的安装目录下找到bin的文件夹,找到mingw32- ...
原文:http://blog.csdn.net/meylovezn/article/details/
关于编码问题的终极解决方案:在python的Lib\site-packages文件夹下新建一个sitecustomize.py文件,输入:import syssys.setdefaultencoding('gb2312')这里要注意一点是 ...
从来没有在Windows下用过pip,今天试了下,原来pip也可以在Windows下安装,使用也和linux下一样简单. 先从下面的地址下载pip源码: http://pypi.python.org/pypi/pip/ 最新版本是6.0.8,下载连接为: http://pypi.python.org/packages/source/p/pip/pip-6.0 ...

我要回帖

更多关于 python phantomjs安装 的文章

 

随机推荐