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

selenium

  • 什么是selenium?

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

  • 环境搭建

    • 安装selenum:pip install selenium

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

效果展示:

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

代码介绍:

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

phantomJs

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

代码演示:

from selenium import webdriver
import time # phantomjs路径
path = r'PhantomJS驱动路径'
browser = webdriver.PhantomJS(path) # 打开百度
url = 'http://www.baidu.com/'
browser.get(url) time.sleep(3) browser.save_screenshot(r'phantomjs\baidu.png') # 查找input输入框
my_input = browser.find_element_by_id('kw')
# 往框里面写文字
my_input.send_keys('美女')
time.sleep(3)
#截屏
browser.save_screenshot(r'phantomjs\meinv.png') # 查找搜索按钮
button = browser.find_elements_by_class_name('s_btn')[0]
button.click() time.sleep(3) browser.save_screenshot(r'phantomjs\show.png') time.sleep(3) browser.quit()

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

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

谷歌无头浏览器

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

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

最新文章

  1. JavaScript 笔记
  2. 如何用 CSS 做到完全垂直居中
  3. Excel中利用IF和TIME函数计算出上下班状态!
  4. MySQL/MariaDB/Percona数据库升级脚本
  5. 说一说window.parent
  6. hdoj 3836 Equivalent Sets【scc&&缩点】【求最少加多少条边使图强连通】
  7. jQuery整体架构源码解析
  8. FPGA 时序问题
  9. (大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据
  10. 真机调试方法- IOS/Android移动设备
  11. Linux系统运维工程该具备哪些素质
  12. stable_sort()与sort
  13. Oracle RAC基本概念
  14. Java系列1 -- 浅谈面向对象
  15. Maven把项目依赖的所有jar包都打到同一个jar中
  16. SharePoint代码建表(实战)
  17. FutureTask原理解析
  18. Salt初识和安装
  19. Coursera, Machine Learning, Unsupervised Learning, K-means, Dimentionality Reduction
  20. Character Encoding Issues for tomcat

热门文章

  1. 三种常见的编码:ASCII码、UTF-8编码、Unicode编码等字符占领的字节数
  2. Silverlight访问数据库大全(转)
  3. 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
  4. bzoj2194
  5. createrepo
  6. MySQL 1071错误解决办法
  7. 在 CentOS 7上安装并配置 Python 3.6 环境
  8. 谈谈windows下克隆的坑
  9. [Swift通天遁地]九、拔剑吧-(4)使用开源类库创建可滑动的Segment分段控件
  10. 枚举详解之EnumSet、EnumMap用法