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

selenium语言方面支持java/python,浏览器方面支持各大主流浏览器谷歌,火狐,ie等。我选用的是python3.6+chrome组合


chrome

写python爬虫程序之前,需要准备两样东西:

1.[chrome][1]/浏览器              https://www.google.cn/chrome/
2.[chromedriver][2] /浏览器驱动   http://chromedriver.storage.googleapis.com/index.html

浏览器和浏览器驱动的搭配版本要求比较严格,不同的浏览器版本需要不同的驱动版本;我的版本信息:

 chrome info: chrome=66.0.3359.139Driver info: chromedriver=2.37.544315

其他版本对照

chromedriver版本 Chrome版本
v2.37 v64-66
v2.36 v63-65
v2.34 v61-63

chrome浏览器
这里需要注意的是如果想更换对应的谷歌浏览器,要高版本的请务必直接升级处理,低版本的卸载时要彻底!彻底!彻底!卸载,包括(Google升级程序,注册表,残留文件等),再安装。否则爬虫程序启动不了浏览器。

chromedriver浏览器驱动
chromedriver 放置的位置也很重要,把chromedriver放在等会要写的.py文件旁边是最方便的方法。当然也可以不放这里,但是需要配置chromedriver的路径,我这里就不介绍这种方法了。

火狐驱动下载地址:https://github.com/mozilla/ge...

python

终于开始敲代码了

打开网站

from selenium import webdriverbrowser = webdriver.Chrome()
browser.get("https://segmentfault.com/")

三行代码即可自动完成启动谷歌浏览器,输出url,回车的骚操作。
此时的窗口地址栏下方会出现【Chrome 正在受到自动测试软件的控制】字样。

提交表单

下面我们来尝试控制浏览器输入并搜索关键字找到我们这篇文章;
先打开segmentfault网站,F12查看搜索框元素

<input id="searchBox" name="q" type="text" placeholder="搜索问题或关键字" class="form-control" value="">

发现是一个id为searchBox的input标签,ok

from selenium import webdriver
browser = webdriver.Chrome()   #打开浏览器
browser.get("https://segmentfault.com/")   #输入urlsearchBox = browser.find_element_by_id("searchBox")  #通过id获得表单元素
searchBox.send_keys("python爬虫之初恋 selenium")   #向表单输入文字
searchBox.submit()    #提交

find_element_by_id()方法:根据id获得该元素。
同样还有其他方法比如

find_element_by_xpath() 通过路径选择元素
find_element_by_tag_name() 通过标签名获得元素
find_element_by_css_selector() 通过样式选择元素
find_element_by_class_name() 通过class获得元素
find_elements_by_class_name() 通过class获得元素们,element加s的返回的都是集合

举个栗子:

1.find_elements_by_css_selector("tr[bgcolor='#F2F2F2']>td")获得 style为 bgcolor='#F2F2F2' 的tr的子元素td2.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div[3]/div[1]/div[2]/div/h4/a")获得此路径下的a元素。find_element_by_xpath方法使用谷歌浏览器F12选择元素右键copy->copyXpath急速获得准确位置,非常好用,谁用谁知道3.find_element_by_xpath("..")获得上级元素
4.find_element_by_xpath("following-sibling::")获同级弟弟元素
5.find_element_by_xpath("preceding-sibling::")获同级哥哥元素

抓取数据

获得元素后.text方法即可获得该元素的内容
我们获得文章的简介试试:

from selenium import webdriver
browser = webdriver.Chrome()   #打开浏览器browser.get("https://segmentfault.com/")   #输入url
searchBox = browser.find_element_by_id("searchBox")  #通过id获得表单元素
searchBox.send_keys("python爬虫之初恋 selenium")   #向表单输入文字
searchBox.submit()                                #提交text = browser.find_element_by_xpath("//*[@id='searchPage']/div[2]/div/div[1]/section/p[1]").text
print(text)

除了捕获元素还有其他的方法:

refresh() 刷新
close() 关闭当前标签页 (如果只有一个标签页就关闭浏览器)
quit() 关闭浏览器
title 获得当前页面的title
window_handles 获得所有窗口选项卡id集合
current_window_handle 获得当前窗口选项卡id
switchTo().window() 根据选项卡id切换标签页
execute_script('window.open("www.segmentfault.com")') 执行js脚本(打开新标签)
maximize_window() 最大化
get_screenshot_as_file() 截图(图片保存路径+名称+后缀)
set_page_load_timeout(30) 设置加载时间
ActionChains(driver).move_to_element(ele).perform() 鼠标悬浮在ele元素上

启动前添加参数

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://101.236.23.202:8866")  //代理
chromeOptions.add_argument("headless")   //不启动浏览器模式
browser = webdriver.Chrome(chrome_options=chromeOptions)

不加载图片启动

def openDriver_no_img():options = webdriver.ChromeOptions()prefs = {'profile.default_content_setting_values': {'images': 2}}options.add_experimental_option('prefs', prefs)browser = webdriver.Chrome(chrome_options=options)return browser

反爬虫应对手段

二维码识别:https://segmentfault.com/a/11...
IP代理:https://segmentfault.com/n/13...

python爬虫之初恋 selenium相关推荐

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

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

  2. python爬虫代理和selenium

    python爬虫代理和selenium 1.代理ip的使用 1.1 获取蘑菇代理中的代理ip def get_ip():response=requests.get('http://piping.mog ...

  3. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  4. PYTHON 爬虫笔记七:Selenium库基础用法

    知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium ...

  5. Python爬虫利器五Selenium用法

    在上一节我们学习了 PhantomJS 的基本用法,归根结底它是一个没有界面的浏览器,而且运行的是 JavaScript 脚本,然而这就能写爬虫了吗?这又和 Python 有什么关系?说好的 Pyth ...

  6. Python爬虫第二课 Selenium介绍和反爬技术

    selenium的介绍 知识点: 了解 selenium的工作原理 了解 selenium以及chromedriver的安装 掌握 标签对象click点击以及send_keys输入 1. seleni ...

  7. python 模拟浏览器selenium_从零开始写Python爬虫 --- 3.1 Selenium模拟浏览器

    本来说好要写Mechanize模拟浏览器的,结果一看居然只支持2.x版本的Python,而且已经长久没有更新维护了,本着学新不学旧的原则,我决定跳过他,直接开学Selenium(其实就是我懒,逃 Se ...

  8. 『python爬虫』26. selenium与超级鹰处理复杂验证码的处理(保姆级图文)

    目录 1. 图片选择类验证码 2. 滑块验证码 3. 滑块出错,不加载 总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 1. 图片选择类验证码 ...

  9. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

最新文章

  1. 使用 Vml 制作立体柱状投票统计图的完整程序
  2. 一个技术总监的忠告:精通那么多技术,你为何还是受不到重用?
  3. 学习Angular前了解下TypeScript
  4. java 为什么重写equals一定要重写hashcode?
  5. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)
  6. 如何查看某个ABAP user针对某个authorization object的assignment status
  7. createelement 设置id_还记得你的第一个网络ID是什么吗?
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 16丨报告的记录 II【难度中等】
  9. CentOS7 搭建Kafka消息队列环境,以及Python3操作Kafka Demo
  10. python提速qq邮箱邮件_python3通过qq邮箱发送邮件
  11. 深度学习的实用层面 —— 1.2 偏差/方差
  12. 营业税计提及企业所得税的相关计算公式
  13. javascript 的alert()功能 prompt() 功能
  14. 六【Java 基础】数组的概述: 数组的定义与使用
  15. npm -i 与npm install -s与-d的区别
  16. flac转mp3的方法
  17. LCD vs LED vs OLED
  18. PostgreSQL数据库扩展包——原理CreateExtension扩展控制文件解析
  19. 雅思-我们遇到过的哪些熟悉又陌生的单词1
  20. 电商详情页缓存架构(一)电商网站的商品详情页架构

热门文章

  1. 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
  2. 自定义View实现图片的绘制、旋转、缩放
  3. ASP.NET的简单与面向对象开发
  4. ls:显示指定目录的详细信息
  5. AOP动态代理的实现机制
  6. Sanboxie 5.14安装图解
  7. 使用Volley传输网络数据
  8. HDU2544 最短路(模版题dijkstra/floyd/spfa)
  9. 让win7系统高速运行的优化技巧
  10. xp 不能上传邮件附件的解决办法