Selenium与PhantomJS踩过的坑
Selenium与PhantomJS踩过的坑
Selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。
Selenium可以根据我们的指令,让浏览器自动加载页面,获取需要的页面,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所有我们需要用一个叫PhantomJS的工具代替真实的浏览器。
Selenium的安装
直接通过pip安装即可,这里没什么坑
pip install selenium
PhantomJS
PhantomJS是一个基于Webkit的"无界面"(headless)浏览器,它会把网站加载到内存并执行页面上的JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器更高效。
如果我们把Selenium和PhantomJS结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理JavaScript、Cookie、headers,以及任何我们真实用户需要做的事情。
注意:
- PhantomJS只能从它的网站(http://phantomjs.org/download.html)下载。
- 因为PhantomJS是一个功能完善(虽然无界面)的浏览器而非一个Python库,所以它不需要像Python的其它库一样安装,但我们可以通过Selenium调用PhantomJS来直接使用
- PhantomsJS官方才考文档:http://phantomjs.org/documention
- 这里不能通过pip、apt-get,yum等方式安装,一开始在自己虚拟机通过apt-get安装,但是一直报错。后来又全卸载,重新通过官网下载手动安装才行。
- 在自己的远程服务器中运行代码,报错:
TypeError: urlopen() got multiple values for keyword argument 'body'
原因是服务器的urllib3版本太低,卸载以后重装就好了
sudo apt-get remove python-urllib3
sudo pip install -U urllib3
下面是代码:
#-*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.PhantomJS()
driver.get("www.wangzhi.com") #穿入你的网址
driver.find_element_by_name("email").send_keys("aaa@qq.com") #按F12,查看网页源代码中登录界面的name传参是什么
# 我的网页:<input id="loginEmail" class='login_input' type="text" name="email" placeholder="请输入您的邮箱">
# 所以 find_element_by_name("email")里面穿的是email,pwd一样,find_element_by_id也一样
time.sleep(2)
driver.find_element_by_name("pwd").send_keys('111111')
time.sleep(2)
driver.find_element_by_id("loginButton").click()
time.sleep(5)
driver.save_screenshot('broad.png')
服务器没有中文字体
所有都准备好了,原本以为万事大吉,但是发现截图的内容,不能显示中文。
在网上查了原因是系统没有装中文字体。
安装字体可以参考https://www.jianshu.com/p/e7f12b8c8602
中文字体解决以后,又出现了截图页面不完整
最后在网上查了原因 ,是因为分辨率的原因
在代码上添加
driver.set_window_size(1366, 768)
完整代码:
#-*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.PhantomJS(service_args=['--ignore-ssl-errors=true', '--ssl-protocol=any'])
driver.get("yourwebsite")
driver.set_window_size(1366, 768) #这里必须加在get网页的后面,加在它之前没用
driver.find_element_by_name("email").send_keys("你的用户名")
time.sleep(1)
driver.find_element_by_name("pwd").send_keys('你的密码')
time.sleep(1)
driver.find_element_by_id("loginButton").click()
time.sleep(5)
driver.save_screenshot('/data/jenkins/broadcastPicture/broad.png')
因为截图涉及公司数据,就不粘贴到这里了。
实践过程中,通过参考 Python爬虫(二十一)_Selenium与PhantomJS实现了自动截图,
参考Python爬虫(二十二)_selenium案例:模拟登陆豆瓣实现了自动登录
Selenium与PhantomJS踩过的坑的更多相关文章
- 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例
Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...
- 转载:appium踩过的坑
原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...
- 项目中踩过的坑之-sessionStorage
总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...
- web开发实战--弹出式富文本编辑器的实现思路和踩过的坑
前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...
- "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"
欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...
- 【转载】Fragment 全解析(1):那些年踩过的坑
http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...
- Redis Cluster踩过的坑
Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops
- 第八篇:web之前端踩的一些坑
前端踩的一些坑 前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...
- selenium+BeautifulSoup+phantomjs爬取新浪新闻
一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...
随机推荐
- PHP 根据php传的值修改 select 中动态生成的 option 组的默认选中值
有一个情况今天遇到了:通过后台传过来的一组下拉框的option值,需要默认选中其中某一项. html 部分是这样的: <select class="form-control" ...
- 菜鸟学IT之豆瓣爬取初体验
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 可以用pandas读出之前保存的数据: newsdf = pd.re ...
- 退出状态、测试(test or [])、操作符、[]与[[]]区别
一.退出状态 系统每执行一个命令,都会返回一个退出状态,若返回退出状态为0,表示命令执行成功, 若返回退出状态不为0,表示命令执行有错误. echo $? 可以打印出退出状态. 例如:ls echo ...
- UML的使用
软件工程项目这周要交一个设计文档,其中涉及UML图的画法,根据上课给的ppt做一个记录. 有关于UML的介绍在这里不再赘述,直接开整! UML的基本模型 当然必要的介绍必不可少,这里先介绍UML的基本 ...
- 各大web服务器https的证书文件
nginx key+pem iis pfx+pfx-password.txt tomcat pfx+pfx-password.txt apache key+chain.crt+public.crt
- Java文件上传下载原理
文件上传下载原理 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客户端发送到服务器的标准机制. 但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp运行机制所决定的 文件上传原 ...
- codeDecodeError ascii codec can't decode byte 0xe2 in position 44 ordinal not in range(128)
- android: 结合BottomNavigationView、ViewPager和Fragment 实现左右滑动的效果
主界面:MainActivity package com.yongdaimi.android.androidapitest; import android.os.Bundle; import andr ...
- easyui datagrid怎么动态获取表头的列名及显示名称
说明:目前使用easyui combobox多选属性,绑定的数据源是来自datagrid的表头的列名及显示名称 处理方法: //获取冻结的数据源并返回key,value格式数据 var GetFroz ...
- [转]Oracle 查询表外键相关信息
原文地址:https://www.csdn.net/gather_27/MtTaUgxsNzYxMi1ibG9n.html 查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询): s ...