最近遇到一个问题就是,如何模拟真实浏览器行为然后截取显示的网页。
方案
- 模拟登陆网站或者直接使用cookie登陆。
- 对指定页面按钮进行点击刷新页面,截取网页。
我们使用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')