欢迎来到赛兔子家园

Selenium-无头浏览器

无头浏览器简介

我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。而无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。

有了无头浏览器,我们就能做包括但不限于以下事情:

  • 对网页进行截图保存为图片或 pdf。
  • 抓取单页应用执行并渲染(解决传统 HTTP 爬虫抓取单页应用难以处理异步请求的问题)。
  • 做表单的自动提交、UI的自动化测试、模拟键盘输入等。
  • 用浏览器自带的一些调试工具和性能分析工具帮助我们分析问题。
  • 在最新的无头浏览器环境里做测试、使用最新浏览器特性。
  • 写爬虫做你想做的事情。

这里我们简单来说,在selenium中使用无头浏览器。

PhantomJS

PhantomJS是一个无界面的、可脚本编程的WebKit浏览器引擎,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。

  • PhantomJS是一个基于webkit内核、无界面的浏览器,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现;
  • PhantomJS提供Javascript API接口,可以通过编写JS程序直接与webkit内核交互;
  • PhantomJS的应用:无需浏览器的 Web 测试、网页截屏、页面访问自动化、网络监测。
官网:https://phantomjs.org/
github:https://github.com/ariya/phantomjs/

下载安装

打开下载链接:https://phantomjs.org/download.html,根据自己的系统平台,下载相应的包,我这里是Windows 64位系统,所以,

我选择下载windows版本的,phantomjs-2.1.1版本下载地址:

 将压缩包解压到没有中文、空格的目录,我这里解压到Python的安装目录中的Scruots目录。

 测试

import time
# 1、导入webdriver
from selenium import webdriver

# 2、实例化指定浏览器的webdriver对象,必须指定phantomjs的安装路径
driver = webdriver.PhantomJS(executable_path=r"C:\Python\Python37\Scripts\phantomjs\bin\phantomjs.exe")
try:
    # 3、访问指定的url,进行相关操作
    driver.get(url="https://www.baidu.com")
    print("获取title", driver.title)
    driver.find_element_by_id("kw").send_keys("青城子")
    driver.find_element_by_id("su").click()
# 4、完事后,关闭浏览器
except Exception as error:
    print(error)
finally:
    time.sleep(2)
        driver.quit()

PhantomJS 和新版的selenium已经分手,所以你在使用的时候,会有这提示,注意,这是提示,不是报错!

 解决办法!要么视而不见,要么按照提示去使用Google或者Firefox的无头浏览器。

Google无头浏览器

Google的无头浏览器配置倒也简单,只需要要在实例化driver对象的时候,添加参数即可:

特别注意:Google无头浏览器无法通过driver.maximize_window()来最大化浏览器,默认Google浏览器运行width:800 height:600 会导致定位失败。

解决方案:通过driver.set_window_size(width,height)来设置浏览器大小,具体根据运行电脑的分辨率来设置。例如:driver.set_window_size(1552,840)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'tian'
__data__ = '2021/2/24 17:06'


from selenium import webdriver
from selenium.webdriver.chrome.options import Options


# 创建一个参数对象,用来控制chrome已无界面模式打开
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")

# 创建浏览器对象
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.implicitly_wait(10)
#driver.maximize_window() 对无头谷歌浏览器是无效的,无头浏览器默认按照width:800  height:600窗口大小运行,会导致定位失败。
# 解决方案设置无头浏览器运行时的高和宽,根据运行电脑的屏幕来设置
driver.set_window_size(1552,840)
try: driver.get("https://www.baidu.com/") print(driver.title) # 百度一下,你就知道 except Exception as error: print("报错信息:{0}".format(error)) finally: driver.quit()
Firefox无头浏览器
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'tian'
__data__ = '2021/2/24 17:06'


from selenium import webdriver
from selenium.webdriver.firefox.options import Options


# 创建浏览器对象
options = Options()
options.add_argument("--headless")
driver = webdriver.Firefox(firefox_options=options)
driver.implicitly_wait(10)


try:
    driver.get("https://www.baidu.com/")
    print(driver.title) # 百度一下,你就知道

except Exception as error:
    print("报错信息:{0}".format(error))

finally:
    driver.quit()

 

posted on 2021-02-24 18:19  赛兔子  阅读(725)  评论(0编辑  收藏  举报

导航