Selenium+firefox使用

Posted g2thend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium+firefox使用相关的知识,希望对你有一定的参考价值。

-------------几乎无关-----------------------------------------------------

基础环境安装

需要安装的基础设施
firefox 浏览器,火狐浏览器的驱动geckodriver,以及必备神器Selenium

之前使用是谷歌浏览器,有个需求是截取网页内单个元素生成图片,测试总不成功,后来使用Firefox可以正常生成,后续可以使用无头浏览器以便程序运行时不用再显示浏览器的操作界面。

##1,火狐(版本未测试,使用ubuntu1604 默认版本
##2,驱动

https://github.com/mozilla/geckodriver/releases/
https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
解压可执行文件到PATH路径下:/usr/bin/

##3,在python3.X下pip  安装Selenium

详细安装略。

测试使用

测试使用可以大概看出操作的步骤,更多详细需要参考官网文档。

from selenium import webdriver
from time import sleep
driver =webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
##生成的图片扩展格式应该为png,不然报错。
driver.get_screenshot_as_file("/home/yon/baidu_img.jpg")
/home/yon/pycharm-code/test/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py:1031: UserWarning: name used for saved screenshot does not match file type. It should end with a `.png` extension
  "type. It should end with a `.png` extension", UserWarning)
True
##成功返回True
driver.get_screenshot_as_file("/home/yon/baidu_img.png")
True
a = driver.find_element_by_id("su")

##成功返回True
a.screenshot("/home/yon/baidu.png")
True
driver.close()

技术图片

selinum的使用方法

selenium:
https://selenium-python.readthedocs.io/
暂略

-------------------无关结束------------------------------------------------

Selenium+ PhantomJS

抓取某音乐评论生成图片

环境搭建

通过selenium + google 或 firefox 通过指定元素进行截图,会发现截图的位置错误,即一个网页的显示必定超过显示器的高度,通过定位元素后截取的图片只是相对与当前显示的页面,如果将页面下拉,再执行截取操作,会发现图片又不一样。
通过搜索,发现可以使用无头浏览器 PhantomJS 先保存整个网页为图片,然后定位需要截取元素的相对位置,然后获取该匀元素在整个已保存图片的坐标轴的绝对位置,通过图片工具Image包工具进行截取即可。

安装注意:因为高版本selenium 在支持无头浏览器上功能丢弃,所以需要安装低版本的selenium. python 版本使用3.6
报错:

warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

##原因
selenium已经放弃PhantomJS,了,建议使用火狐或者谷歌无界面浏览器。

##解决
pip uninstall selenium
pip install selenium==2.48.0

##参考
https://blog.csdn.net/u010358168/article/details/79749149

安装其他:

##1,phantomjs
https://phantomjs.org/

##下载链接
https://phantomjs.org/download.html

##快速上手,但是我们使用selenium  API 调用phantomjs
https://phantomjs.org/quick-start.html


##2,安装pillow
PIL(Python Imaging Library)是Python一个强大方便的图像处理库,名气也比较大。不过只支持到Python 2.7
Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库
Python 3.x 安装Pillow

pip install Pillow

 
## from PIL import Image 引用使用库 
from PIL import Image
im = Image.open("xxx.jpg")
im.rotate(45).show()

使用

使用案例

from selenium import webdriver
from PIL import Image

driver = webdriver.PhantomJS()
driver.get('https://music.163.com/#/song?id=521784134')
driver.switch_to.frame('g_iframe')
# driver.save_screenshot('/home/yon/src.png')

element = driver.find_elements_by_class_name("itm")[2]
## 位置+35 是为了调整元素绝对位置,不然显示
left = element.location['x'] + 35
top = element.location['y']
right = element.location['x'] + element.size['width'] + 35
bottom = element.location['y'] + element.size['height']
print(left,top, right, bottom)
##保存的图片路径需要为绝对路径
im = Image.open('/home/yon/src.png')
im = im.crop((left, top, right, bottom))
im.save('/home/yon/shortscreens5.png')


以上是关于Selenium+firefox使用的主要内容,如果未能解决你的问题,请参考以下文章

用于 Firefox 的 Selenium WebDriver [重复]

Selenium C#FirefoxDriver不适用于最新的Selenium和Firefox

带有 Firefox Web 驱动程序的 Selenium 无法通过 Python 代码找到元素

Firefox Build 不适用于 Selenium

selenium webdriver.firefox()错误[重复]

在 selenium 中创建 firefox 会话时出错