最近遇到一个问题就是,如何模拟真实浏览器行为然后截取显示的网页。

方案

  1. 模拟登陆网站或者直接使用cookie登陆。
  2. 对指定页面按钮进行点击刷新页面,截取网页。

我们使用selenium库来操作浏览器驱动,即执行浏览器相应的驱动命令,实现相应的浏览器操作。


准备工作

  • selenium库
    浏览器自动化测试框架,其作用是通过操作浏览器驱动来控制浏览器行为,达到模拟真实用户操作浏览器的效果。原理为自动化测试python脚本-->浏览器driver -->浏览器。官网 python中文文档 python官方文档 python安装
pip install -U selenium 安装并更新
  • 浏览器驱动
    selenium需要下载对应的浏览器驱动才能操作计算机中已经安装好的浏览器。下载对应驱动版本exe文件后,将其放入python安装路径的scripts目录即可,注意驱动版本要和浏览器版本匹配。
    chrome驱动: 下载地址 备用地址
  • Phantomjs浏览器 它是基于webkit浏览器的无头浏览器,下载安装完成并设置系统环境变量。selenium支持直接调用。官方下载地址。截图的图片为长图(网页全部展开)。

使用方法

以chrome浏览器为例

  • 简单用例
from selenium import webdriver  #导入驱动模块

driver =webdriver.Chrome()       #创建相应浏览器驱动对象
driver.get("http://www.baidu.com")  #使用驱动对象打开网站
  • 操作cookie
cookie = {‘name': foo', 'value': 'bar’} 
driver.add_cookie(cookie)

driver.get_cookies()
  • 获取元素
    已知元素定义
    <input type="text" name="passwd" id="passwd-id" /> 可以通过以下方法获取元素
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element.find_elements_by_tag_name("option")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
  • 输入内容
element.send_keys("some text")
element.send_keys(" and some", Keys.ARROW_DOWN) 使用Keys类来模拟输入方向键
element.clear() 清除文本内容

element.click() 点击
  • 等待页面加载完成
  • 处理对话框
alert = drvier.switch_to_alert()
  • 关闭浏览器
driver.quit() #关闭这个浏览器
driver.close() #关闭当前界面
  • 截取网页图片
    driver.save_screenshot('1.png')