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. ...
随机推荐
- EasyExcel写入百万级数据到多sheet---非注解方式
EasyExcel是什么? 快速.简单避免OOM的java处理Excel工具 一.项目需求 从mongo库中查询数据,导出到excel文件中.但是动态导出的excel有多少列.列名是什么.有多少she ...
- 刷题记录:[ByteCTF 2019]EZCMS
目录 刷题记录:[ByteCTF 2019]EZCMS 一.知识点 1.源码泄露 2.MD5长度扩展攻击 3.php://filter绕过正则实现phar反序列化 刷题记录:[ByteCTF 2019 ...
- LOL佐伊官方手办
花199元在某宝上买的官方正版佐伊手办终于到了,话不多说直接上图! 虽然脸有点不切实际的大,但还是很可爱~
- 游标_oracle
https://blog.csdn.net/weixin_41367660/article/details/80449032
- 2019_软工实践_Beta(2/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 ?按照时间进度的安排进行相应的检查 展示GitHub当日代码/文档签入记 ...
- Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.
https://blog.csdn.net/zhouyingge1104/article/details/83307637 C#项目中使用NewtonSoft.json,报错提示: Can not a ...
- Oralce 如何将查询结果中的0转成空的
我们遇到过大多的情况的需求是查询结果中空转为0,这个可以通过oracle的NVL()函数就可以搞定. 之前做报表客户有个需求,查询出结果为0 要转成空的,不显示0 那么在oracle有没有现成函数能搞 ...
- win10磁盘分区
注意:未分配的磁盘是无法使用的. 安装系统的时候,我们可以先将系统装起来,再来对未分配的磁盘进行操作. 具体步骤:https://jingyan.baidu.com/article/fcb5aff76 ...
- 数据分析入门——pandas之DataFrame数据丢失
一.数据丢失分类 1)nd中分为两种:None和np.nan(NaN) 其中,None是python中的对象,是一个object:而nan是一个float类型 两种不同的类型,运算速度也是不同的 2) ...
- LODOP表格table简短问答及相关博文
LODOP打印表格超文本输出表格:ADD_PRINT_HTML.ADD_PRINT_HTM.ADD_PRINT_TABLE.ADD_PRINT_TBURL打印表格带页头页尾 参考样例15 http:/ ...