浏览器控制之 selenium,phantomJs谷无头浏览器

selenium

  • 什么是selenium?

    是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作。  

  • 环境搭建

    • 安装selenum:pip install selenium

    • 获取某一款浏览器的驱动程序(以谷歌浏览器为例)

效果展示:

  1. from selenium import webdriver
  2. from time import sleep
  3. # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
  4. driver = webdriver.Chrome(r'驱动程序路径')
  5. # 用get打开百度页面
  6. driver.get("http://www.baidu.com")
  7. # 查找页面的“设置”选项,并进行点击
  8. driver.find_elements_by_link_text('设置')[0].click()
  9. sleep(2)
  10. # # 打开设置后找到“搜索设置”选项,设置为每页显示50条
  11. driver.find_elements_by_link_text('搜索设置')[0].click()
  12. sleep(2)
  13. # 选中每页显示50条
  14. m = driver.find_element_by_id('nr')
  15. sleep(2)
  16. m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
  17. m.find_element_by_xpath('.//option[3]').click()
  18. sleep(2)
  19. # 点击保存设置
  20. driver.find_elements_by_class_name("prefpanelgo")[0].click()
  21. sleep(2)
  22. # 处理弹出的警告页面 确定accept() 和 取消dismiss()
  23. driver.switch_to_alert().accept()
  24. sleep(2)
  25. # 找到百度的输入框,并输入 孔辉博客园
  26. driver.find_element_by_id('kw').send_keys('孔辉博客园')
  27. sleep(2)
  28. # 点击搜索按钮
  29. driver.find_element_by_id('su').click()
  30. sleep(2)
  31. # 在打开的页面中找到“Go浪之路 - 随笔分类 - 孔辉 - 博客园”,并打开这个页面
  32. driver.find_elements_by_link_text('Go浪之路 - 随笔分类 - 孔辉 - 博客园')[0].click()
  33. sleep(3)
  34. # 关闭浏览器
  35. driver.quit()

代码介绍:

  1. #导包
  2. from selenium import webdriver
  3. #创建浏览器对象,通过该对象可以操作浏览器
  4. browser = webdriver.Chrome('驱动路径')
  5. #使用浏览器发起指定请求
  6. browser.get(url)
  7. #使用下面的方法,查找指定的元素进行操作即可
  8. find_element_by_id 根据id找节点
  9. find_elements_by_name 根据name
  10. find_elements_by_xpath 根据xpath查找
  11. find_elements_by_tag_name 根据标签名找
  12. find_elements_by_class_name 根据class名字查找

phantomJs

  • PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。

代码演示:

  1. from selenium import webdriver
  2. import time
  3. # phantomjs路径
  4. path = r'PhantomJS驱动路径'
  5. browser = webdriver.PhantomJS(path)
  6. # 打开百度
  7. url = 'http://www.baidu.com/'
  8. browser.get(url)
  9. time.sleep(3)
  10. browser.save_screenshot(r'phantomjs\baidu.png')
  11. # 查找input输入框
  12. my_input = browser.find_element_by_id('kw')
  13. # 往框里面写文字
  14. my_input.send_keys('美女')
  15. time.sleep(3)
  16. #截屏
  17. browser.save_screenshot(r'phantomjs\meinv.png')
  18. # 查找搜索按钮
  19. button = browser.find_elements_by_class_name('s_btn')[0]
  20. button.click()
  21. time.sleep(3)
  22. browser.save_screenshot(r'phantomjs\show.png')
  23. time.sleep(3)
  24. browser.quit()

需求是尽可能多的爬取豆瓣网中的电影信息

  1. from selenium import webdriver
  2. from time import sleep
  3. import time
  4. if __name__ == '__main__':
  5. url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action='
  6. # 发起请求前,可以让url表示的页面动态加载出更多的数据
  7. path = r'C:\Users\Administrator\Desktop\爬虫授课\day05\ziliao\phantomjs-2.1.1-windows\bin\phantomjs.exe'
  8. # 创建无界面的浏览器对象
  9. bro = webdriver.PhantomJS(path)
  10. # 发起url请求
  11. bro.get(url)
  12. time.sleep(3)
  13. # 截图
  14. bro.save_screenshot('1.png')
  15. # 执行js代码(让滚动条向下偏移n个像素(作用:动态加载了更多的电影信息))
  16. js = 'window.scrollTo(0,document.body.scrollHeight)'
  17. bro.execute_script(js) # 该函数可以执行一组字符串形式的js代码
  18. time.sleep(2)
  19. bro.execute_script(js) # 该函数可以执行一组字符串形式的js代码
  20. time.sleep(2)
  21. bro.save_screenshot('2.png')
  22. time.sleep(2)
  23. # 使用爬虫程序爬去当前url中的内容
  24. html_source = bro.page_source # 该属性可以获取当前浏览器的当前页的源码(html)
  25. with open('./source.html', 'w', encoding='utf-8') as fp:
  26. fp.write(html_source)
  27. bro.quit()

谷歌无头浏览器

  • 由于PhantomJs最近已经停止了更新和维护,所以推荐大家可以使用谷歌的无头浏览器,是一款无界面的谷歌浏览器。

    1. from selenium import webdriver
    2. from selenium.webdriver.chrome.options import Options
    3. import time
    4. # 创建一个参数对象,用来控制chrome以无界面模式打开
    5. chrome_options = Options()
    6. chrome_options.add_argument('--headless')
    7. chrome_options.add_argument('--disable-gpu')
    8. # 驱动路径
    9. path = r'C:\Users\ZBLi\Desktop\1801\day05\ziliao\chromedriver.exe'
    10. # 创建浏览器对象
    11. browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
    12. # 上网
    13. url = 'https://www.cnblogs.com/konghui/'
    14. browser.get(url)
    15. time.sleep(3)
    16. browser.save_screenshot('baidu.png')
    17. browser.quit()

浏览器控制之 selenium,phantomJs谷无头浏览器的更多相关文章

  1. 爬虫之 图片懒加载, selenium , phantomJs, 谷歌无头浏览器

    一.图片懒加载 懒加载 :    JS 代码  是页面自然滚动    window.scrollTo(0,document.body.scrollHeight)   (重点) bro.execute_ ...

  2. 07-selenium、PhantomJS(无头浏览器)

    selenium(自动化测试工具可用于在爬虫中解决js动态加载问题) 简介(本质就是模仿浏览器工作) Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safar ...

  3. selenium设置谷歌无头浏览器

    from selenium import webdriver from selenium.webdriver.chrome.options import Options def Browse(): c ...

  4. 爬虫之图片懒加载技术、selenium工具与PhantomJS无头浏览器

    图片懒加载技术 selenium爬虫简单使用 2.1 selenium简介 2.2 selenium安装 2.3 selenium简单使用 2.3.1 selenium使用案例 2.3.2 selen ...

  5. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  6. python之Phantomjs无界面浏览器引擎自动化测试

    文字搬运工,本文主要介绍PhantomJS功能,其中有屏幕快照功能,为后面更新[python接口自动化脚本更新版本],其中新版本中新增自动发送邮件功能正文带图片,使用PhantomJS截取图片后发送邮 ...

  7. 无头浏览器phantomJS

    selenium: 有头浏览器的代表(selenium+python也可实现静默运行 引入python的一个包,包叫:虚拟屏幕pyvirtualdisplay) PhantomJS : 无头浏览器的代 ...

  8. PhantomJS框架(初识无头浏览器)

    博主今天看到大神聊起 headless,首先我去了解了下这个概念  无头浏览器 selenium框架是有头浏览器的代表,即可看得见的浏览器 而headless browser无头浏览器,即看不见的浏览 ...

  9. 爬虫之selenium模块;无头浏览器的使用

    一,案例 爬取站长素材中的图片:http://sc.chinaz.com/tupian/gudianmeinvtupian.html import requests from lxml import ...

随机推荐

  1. whl 安装

    pymssql 安装 C:\Users\sas>pip install d:\pymssql--cp36-cp36m-win_amd64.whl Processing d:\pymssql--c ...

  2. EditText 光标的颜色

    EditText有一个属性:android:textCursorDrawable,这个属性是用来控制光标颜色的   android:textCursorDrawable="@null&quo ...

  3. Windows7安装SQLServer 2008图解

    Windows7安装SQL Server 2008图解        这几天因为需要,一直想安装SQL Server 2008来作为Web后台的数据库进行些实验,但总是没有时间,今天终于有时间了,便安 ...

  4. Weblogic 启动慢解决方法

      添加 启动参数  :      -Xms256m -Xmx512m -XX:MaxPermSize=256m 原因 : 实际是JVM在Linux下的bug:他想调用一个随机函数,但是取不到. 暂时 ...

  5. 03-vue实例生命周期和vue-resource

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  6. python网络爬虫数据中的三种数据解析方式

    一.正则解析 常用正则表达式回顾: 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线 ...

  7. Linux-fork()函数详解,附代码注释

    // // main.c // Project_C // // Created by LiJinxu on 16/8/13. // Copyright © 2016年 LiJinxu-NEU. All ...

  8. Spark SQL入门案例之人力资源系统数据处理

    通过该案例,给出一个比较完整的.复杂的数据处理案例,同时给出案例的详细解析. 人力资源系统的管理内容组织结构图 1) 人力资源系统的数据库与表的构建. 2) 人力资源系统的数据的加载. 3) 人力资源 ...

  9. 关于学习C语言

    c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要. 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习.在这之 ...

  10. CxImage实现9PNG

    CxImage* ScaleImageBy9PNG(CxImage *pRawImage, int nDstWidth,int nDstHeight) { if(NULL == pRawImage) ...