一、Selenium

Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器。

我们可以直接用pip install selenium来进行安装。

中文翻译文档:https://selenium-python-zh.readthedocs.io/en/latest/index.html

官方文档:https://selenium-python.readthedocs.io/

二、Headless Chrome

Headless Chrome是Chrome浏览器提供的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

我们可以在http://chromedriver.chromium.org/(此网站需要翻墙)或者http://chromedriver.storage.googleapis.com/index.html下载对应Chrome浏览器版本的chrome driver。

需要注意的是mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+。下载成后把chromedriver.exe复制到Python安装路径下的Scripts目录中。

更详细的资料可以查看Headless Chrome官方文档

三、使用Selenium + Headless Chrome

实例一:初步使用

  1. from selenium import webdriver
  2.  
  3. chrome_options = webdriver.ChromeOptions()
  4. #设置无界面模式
  5. chrome_options.add_argument("--headless")
  6. #禁用gpu
  7. chrome_options.add_argument("--disable-gpu")
  8. driver = webdriver.Chrome(chrome_options=chrome_options)
  9. driver.get('https://www.baidu.com/')
  10. print('打开浏览器')
  11. print(driver.title)
  12. driver.find_element_by_id('kw').send_keys('测试')
  13. print('关闭')
  14. driver.quit()
  15. print('测试完成')

实例二:模拟在淘宝上搜索

  1. from selenium import webdriver
  2.  
  3. chrome_options = webdriver.ChromeOptions()
  4. chrome_options.add_argument("--headless")
  5. chrome_options.add_argument("--disable-gpu")
  6. browser = webdriver.Chrome(options=chrome_options)
  7.  
  8. browser.get("http://www.taobao.com")
  9. input_str = browser.find_element_by_id('q')
  10. #在搜索栏输入字符
  11. input_str.send_keys("衬衣")
  12. #等待一秒
  13. browser.implicitly_wait(1)
  14. #清空搜索栏
  15. input_str.clear()
  16. input_str.send_keys("裤子")
  17. #寻找搜索按钮
  18. button = browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button')
  19. button.click()
  20. #退出
  21. browser.quit()

实例三:爬取包含Ajax的动态网页数据

  1. from selenium import webdriver
  2.  
  3. chrome_options = webdriver.ChromeOptions()
  4. chrome_options.add_argument("--headless")
  5. chrome_options.add_argument("--disable-gpu")
  6. driver = webdriver.Chrome(chrome_options=chrome_options)
  7. driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html")
  8. # driver.page_source
  9. driver.implicitly_wait(3)
  10. print(driver.find_element_by_id("content").text)
  11. driver.close()

注意driver.quit()是退出驱动并关闭所有窗口,而driver.close()是关闭当前窗口。当只有一个窗口时,两者结果是一样的。

爬虫(三)通过Selenium + Headless Chrome爬取动态网页的更多相关文章

  1. 爬虫(四)Selenium + Headless Chrome爬取Bing图片搜索结果

    Bing图片搜索结果是动态加载的,如果我们直接用requests去访问页面爬取数据,那我们只能拿到很少的图片.所以我们使用Selenium + Headless Chrome来爬取搜索结果.在开始前, ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. R语言爬取动态网页之环境准备

    在R实现pm2.5地图数据展示文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力.在R语言中,爬取这类网页可以使用RSele ...

  4. Selenium及Headless Chrome抓取动态HTML页面

    一般的的静态HTML页面可以使用requests等库直接抓取,但还有一部分比较复杂的动态页面,这些页面的DOM是动态生成的,有些还需要用户与其点击互动,这些页面只能使用真实的浏览器引擎动态解析,Sel ...

  5. 利用selenium并使用gevent爬取动态网页数据

    首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置  https: ...

  6. 【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览

    功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - ...

  7. 记录几个爬取动态网页时的问题(下拉框,旧的元素无法获取,获取的源代码和f12看到的不一致,爬取延迟)

    更新.....这个动态网页其实直接抓取ajax请求就可以了,很简单,我之前想复杂了,虽然也实现了,但是效率极低,不过没关系,就当作是对Selenium的一次学习吧 1.最近在爬取一个动态网页,其中为了 ...

  8. python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  9. python3[爬虫实战] 使用selenium,xpath爬取京东手机

    使用selenium ,可能感觉用的并不是很深刻吧,可能是用scrapy用多了的缘故吧.不过selenium确实强大,很多反爬虫的都可以用selenium来解决掉吧. 思路: 入口: 关键字搜索入口 ...

随机推荐

  1. C# ObservableCollection集合排序

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83346807注意:ObservableColl ...

  2. git工作区和暂存区图

  3. ABP Linq 扩展的 WhereIf 查询内部实现

    public static class QueryableExtensions { public static IQueryable<T> WhereIf<T>(this IQ ...

  4. 解决Eclipse建立Maven Web项目后找不到src/main/java资源文件夹的办法

    问题如题,明细见下图: 解决方法: 在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace ...

  5. swagger请求参数在header中添加token

    网友大部分说的是如下配置 参照配置然而没有作用 注掉改红框内的配置,在方法上加如下注释就可以用 @ApiImplicitParams({ @ApiImplicitParam(paramType = & ...

  6. 【核心核心】10.Spring事务管理【TX】XML+注解方式

    转账案例环境搭建 1.引入JAR包 IOC的6个包 AOP的4个包 C3P0的1个包 MySQL的1个驱动包 JDBC的2个目标包 整合JUnit测试1个包 2.引入配置文件 log4j.proper ...

  7. Algo: Dynamic programming

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  8. [转]Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  9. 四. (TDZ)展示性死区

    在ES6中怎么使用 var Let const ? 1.var 声明之前 2. let 声明之前 3. const声明之前

  10. 廖雪峰Java15JDBC编程-2SQL入门-1SQL介绍

    1.SQL:结构化查询语言 Structured Query Language 针对关系数据库设计 各种数据库基本一致 允许用户通过SQL查询数据而不关心数据库底层存储结构 1.1 SQL使用: 可以 ...