在之前的推文中介绍了一些爬虫的一些方法,不过这些方法基本上都是基于静态页,然而现实中大部分的页面的都是动态渲染的。requests固然很强大,却无法执行javaScript。

一、Selenium简介

Selenium最初是一个自动化测试工具,Selenium可以驱动浏览器自动执行自定义好的逻辑代码,即通过代码完全模拟使用浏览器自动访问目标站点并操作,所以也可以用来爬虫。

二、安装

pip install selenium

既然需要使用浏览器模拟,那么自然还需要安装浏览器驱动:

  1. Google浏览器驱动

https://sites.google.com/a/chromium.org/chromedriver/downloads​sites.google.com/a/chromium.org/chromedriver/downloads

2. Edge浏览器

Microsoft Edge Driver​developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

3. Firefox浏览器

https://github.com/mozilla/geckodriver/releases​github.com/mozilla/geckodriver/releases

4. Safari 浏览器

https://webkit.org/blog/6900/webdriver-support-in-safari-10/​webkit.org/blog/6900/webdriver-support-in-safari-10/

注意:需要把下载好的文件放到python安装路径的scripts目录中才会生效。

否则,在执行webdriver.Firefox()时,就给一个

selenium.common.exceptions.WebDriverException的错误。

这里用到的是火狐浏览器的驱动,下面也将用此驱动来展开。

三、连接浏览器

执行下面的代码就会调起一个空白的浏览器窗口

from selenium import webdriverdriver=webdriver.Firefox()

结果如下:

不过需要注意的是,不是安装了驱动了就可以随意打开浏览器的,只能使用系统中已经安装的浏览器。

其它浏览器的连接浏览器的方法:

from selenium import webdriverbrowser = webdriver.Chrome()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()

其中PhantomJS是一种无界面浏览器,大家可以自行了解一下;

四、牛刀小试

那么如何自动打开指定的网址呢?

在浏览器中加载指定网址,比如:百度

from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")

这里使用drvier.get(url)来打开指定的网址。

结果如下:

既然我们打开了百度,那么肯定会想让他自动搜索一下,如下:

from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys('python 知识学堂')

这里使用find_element_by_id的方法去定位搜索框的位置,然后用send_keys方法输入内容,模拟键盘输入。

至于为啥find_element_by_id中的值是”kw”,这个在之前的文档中有提过。

结果如下:

从结果看出,貌似还差一步,需要按一下回车键,那么怎么办呢?如下:

from selenium import webdriverdriver=webdriver.Firefox()
# 用get打开百度页面
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys('python 知识学堂')
driver.find_element_by_id("su").click()

这里使用的是click()的方法点击指定的按钮。结果如下:

其实到这里,是不是就算一个简简单单的自动化处理了。

大家可以自己运行一下试试。

上面一直用到find_element_by_id去查找元素,常用的元素定位方法如下:

find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()

注意:

1、find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是所有符合条件的标签。

2、find_element()通用方法,它需要传入两个参数:查找方式By和值。实际上,它就是

find_element_by_id()这种方法的通用函数版本,比如

find_element_by_id(id)就等价于

find_element(By.ID, id),二者得到的结果完全一致。

Selenium 还支持xpath语法,这个在之前的基础推文中有详细的介绍,大家可以去公众号中查找

五、总结

这次就简单的介绍一下Selenium框架,以及如何使用浏览器驱动建起浏览器连接,最后通过打开百度的网址,搜索指定的内容,来展示Selenium的强大。

Python 爬虫进阶篇——Selenium教程(一)相关推荐

  1. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析

    上一篇:Python 爬虫入门篇-如何获取网页中的图片.我们了解到了 urllib 获取图片的原理,urllib.request.urlretrieve() 就是用来获取图片的. 这一篇,我们用正则表 ...

  2. Python 爬虫进阶篇——diskcache缓存

    在之前的python爬虫系列中介绍了几种爬取网页内容的方法以及request模块的相关内容,本次推文给大家介绍缓存相关的内容,选择的是diskcache即基于磁盘的缓存. 一.简介 DiskCache ...

  3. Python 爬虫进阶篇-利用beautifulsoup库爬取网页文章内容实战演示

    我们以 fox新闻 网的文章来举例子,把整篇文章爬取出来. 首先是标题,通过结构可以看出来 class 为 article-header 的节点下的 h1 里的内容即是标题,通过 string 可以获 ...

  4. 【Python】【进阶篇】十二、Python爬虫的Xpath简明教程(十分钟入门)

    目录 十二.Python爬虫的Xpath简明教程(十分钟入门) 12.1 Xpath表达式 12.2 Xpath节点 12.3 节点关系 12.4 Xpath基本语法 12.4.1 基本语法使用 12 ...

  5. Python爬虫4.4 — selenium高级用法教程

    Python爬虫4.4 - selenium高级用法教程 综述 Headless Chrome 设置请求头 设置代理IP 常用启动项参数options设置 Cookie操作 selenium设置coo ...

  6. 如何学习Python爬虫[入门篇]?

    这篇文章已经过去很久了,有一些学习资源链接已经失效了,还一直有小伙伴在Python的路上摸索.所以我根据自己的学习和工作经历整理了一套Python学习电子书,在公众号「路人甲TM」后台回复关键词「1」 ...

  7. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  8. python爬虫之初恋 selenium

    selenium 是一个web应用测试工具,能够真正的模拟人去操作浏览器. 用她来爬数据比较直观,灵活,和传统的爬虫不同的是, 她真的是打开浏览器,输入表单,点击按钮,模拟登陆,获得数据,样样行.完全 ...

  9. 一文看懂Python 爬虫 进阶(三)

    一文看懂Python 爬虫 进阶(三) 文章目录 一文看懂Python 爬虫 进阶(三) **猫眼电影(xpath)** **链家二手房案例(xpath)** **百度贴吧图片抓取** 这篇几乎都是代 ...

最新文章

  1. linux环境安装python-pip
  2. websocketd 实现浏览器查看服务器实时日志
  3. HarmonyOS之深入解析Ability的功能和使用
  4. pl/sql developer 设置oracle的date类型默认显示样式
  5. la环球乐园里的机器人_北京环球度假区发布小黄人乐园主题视频,抢鲜感受未来的欢乐体验...
  6. JAVA如何分段_OpenCV Java文本分段
  7. CentOS 7 安装及设置
  8. 算法导论 思考题12-1
  9. java设计模式工厂模式_Java中的复合设计模式
  10. Django中Settings中Templates的路径设置
  11. 相机模型(针孔、广角)
  12. 阿里技术专家:一文教你高效画出技术架构图
  13. 自动化运维---playbook(应用变量)
  14. 中国网络安全现状:“狼”已经来了
  15. 20175312陶光远 与 20175309刘雨恒 结对
  16. Spring中Model,ModelMap以及ModelAndView之间的区别
  17. Tensorflow: ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directo
  18. 周末读《仍然不足够》-TOC与ERP结合的经典小说
  19. 北大青鸟课程与思科等其它IT培训课程的区别
  20. python写自动脚本_用Python实现FGO自动战斗脚本

热门文章

  1. AWS介绍(详细好理解)
  2. 本地存储-cookie|localStorage|sessionStorage|indexedDB
  3. A+CLUB活动预告 | 2023年5月
  4. s2 安恒 漏洞验证工具_Struts2漏洞检查工具2018版(最新版)V2.0[带批量功能]
  5. DataGrid的ItemCreated和ItemDataBound事件转
  6. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发
  7. 华为手机_text是什么文件_text函数怎么使用
  8. uboot源码下载以及编译
  9. 利用matlab数米粒数量,数米粒个数和每个米粒面积的matlab算法实现(递归)。
  10. Linux C应用编程-1-文件IO