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踩过的坑的更多相关文章

  1. 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例

    Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...

  2. 转载:appium踩过的坑

    原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...

  3. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  4. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  5. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  6. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  7. Redis Cluster踩过的坑

    Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops

  8. 第八篇:web之前端踩的一些坑

    前端踩的一些坑   前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...

  9. selenium+BeautifulSoup+phantomjs爬取新浪新闻

    一 下载phantomjs,把phantomjs.exe的文件路径加到环境变量中,也可以phantomjs.exe拷贝到一个已存在的环境变量路径中,比如我用的anaconda,我把phantomjs. ...

随机推荐

  1. git常用命名:自用,持续更新

    1.切换分支 git checkout -b dev origin/feature/迭代1.1 2.提交本地代码到github git init //初始化git git config --globa ...

  2. mysql 遍历所有表并条件查询

    use eepm_push; DROP PROCEDURE IF EXISTS FountTable; delimiter $$ create procedure FountTable() begin ...

  3. 重新学习MySQL数据库12:从实践sql语句优化开始

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/79394168 本文不堆叠网上海量的sql优化技巧或 ...

  4. 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1

    目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...

  5. [C++] const和mutable关键字使用方法

    const 修饰的变量为常成员变量,表示此变量不能被修改赋值,并且构造函数中只能用初始化列表的方式初始化,其他初始化方式都是错误的 const 修饰的函数为常成员函数,表示此函数中只能读取成员变量,不 ...

  6. SDN-based Network Management Solution

    SDN-based Network Management Solution 摘要: 在此项目中,我们开发了一种网络管理应用程序,以监视和控制由支持OpenFlow的交换机和支持SNMP的设备组成的企业 ...

  7. 2019_软工实践_Beta(1/5)

    队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述  检测网站不合理的地方,给组员定下相应时间进度的安排 展示GitHub当 ...

  8. 在本地搭建hyperledger fabric 网络

    参考了官方文档,直接就可以了https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html 很好用 ➜ ~ cd $GOP ...

  9. android -------- SHA 加密算法

    安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...

  10. openresty开发系列39--nginx+lua实现接口签名安全认证

    一)需求背景现在app客户端请求后台服务是非常常用的请求方式,在我们写开放api接口时如何保证数据的安全,我们先看看有哪些安全性的问题 请求来源(身份)是否合法?请求参数被篡改?请求的唯一性(不可复制 ...