selenium简介

Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

github地址:https://github.com/SeleniumHQ/selenium

为什么selenium可以用在爬虫领域?

一般的写爬虫的方法是用python脚本直接对目标网站进行访问,而且只对目标数据进行采集,访问速度很快,这样目标网站很容易就识别出你是机器人,然后把你封锁了~~而使用selenium写爬虫,python脚本操控浏览器进行访问,也就是说python脚本和目标网站之间多了个浏览器的操作,这样的行为更像是人类行为。这样很多难爬的网站也可以轻而易举的抓数据了。

使用selenium前的准备

  • 如果你没有安装selenium,请先使用conda install selenium或pip install selenium.
  • 下载好你的firefox浏览器(这里推荐firefox,当然chrome也行)
  • 安装geckodriver 。geckodrive下载地址:https://github.com/mozilla/geckodriver/releases

    将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)

    如果你没有安装geckodriver.exe应该会出现如下的错误:

    WebDriverException: ‘geckodriver’ executable needs to be in PATH.

selenium基本知识

  • 自动打开某个网址
from selenium import webdriver
from bs4 import BeautifulSoup
初始化浏览器
driver = webdriver.Firefox()
打开某个网址
driver.get(url)
  • 输入登录账号密码(如果需要登录的话)
#这里是根据xpath输入账号和密码的
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("你的账号")
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("你的密码") #定位“点击登录”框的位置的xpath,通过click()执行登录
driver.find_element_by_xpath(xpath).click()
  • 访问你想爬的网页
#获取该网页的源码
driver.get(url)
html = driver.page_source
bs4 = BeautifulSoup(html,'lxml')

selenium使用

  • 打开百度首页
## 引入WebDriver的包
from selenium import webdriver
## 创建浏览器对象
browser = webdriver.Firefox()
## 打开百度网站
browser.get('https://www.baidu.com/')
 效果:自动打开浏览器,然后打开百度首页
  • 模拟登录csdn
from selenium import webdriver
## 创建浏览器对象
browser = webdriver.Firefox()
## 打开小米社区网站
browser.get('https://passport.csdn.net/account/login')
browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
browser.find_element_by_xpath("//*[@id='password']").clear()#清空输入框
browser.find_element_by_xpath("//*[@id='password']").send_keys("你的密码")#输入密码
browser.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/div[1]/div/form/input[8]").click()#登录
 效果:自动打开浏览器,然后打开csdn登录首页,自动输入用户名和密码实现登录。
  • 模拟登录小米社区并抓取帖子标题
## 引入WebDriver的包
from selenium import webdriver
from bs4 import BeautifulSoup
## 创建浏览器对象
browser = webdriver.Firefox()
## 打开小米社区网站
browser.get('https://account.xiaomi.com/pass/serviceLogin?callback=http%3A%2F%2Fbbs.xiaomi.cn%2Flogin%2Fcallback%3Ffollowup%3Dhttp%253A%252F%252Fbbs.xiaomi.cn%252F%26sign%3DM2E4MTg3MzE3MGJmZGFiMTc0MTE5NmNjZTAyYWNmMDZhNTEwOTU2NQ%2C%2C&sid=new_bbs_xiaomi_cn&_locale=zh_CN')
browser.find_element_by_xpath("//*[@id='username']").clear()#清空输入框
browser.find_element_by_xpath("//*[@id='username']").send_keys("你的账号")#输入账号
browser.find_element_by_xpath("//*[@id='pwd']").clear()#清空输入框
browser.find_element_by_xpath("//*[@id='pwd']").send_keys("你的密码")#输入密码
browser.find_element_by_xpath("//*[@id='login-button']").click()#登录
base_url="http://bbs.xiaomi.cn/d-{page}"
#我这里是抓取了前5页,当然你可以抓取的更多
for i in range(1,6):
url=base_url.format(page=i)
browser.get(url)
bs4=BeautifulSoup(browser.page_source,'lxml')
titles=bs4.find_all('div', {'class':'title'})
for title in titles:
title_content=title.get_text().strip('\n')
print(title_content)
效果:

遇到的一些问题

  1. 如何获取xpath?

    这里说一个最简单的方法:

    打开firefox浏览器,进入相应页面,右键某个网页元素点击查看元素,然后复制xpath.如下图所示:



  2. WebDriverException: ‘geckodriver’ executable needs to be in PATH.

    这个上面也提到过。

    geckodrive下载地址:https://github.com/mozilla/geckodriver/releases

    将下载的geckodriver.exe 放到path路径下 D:/Python/Python35-32/(就是放到你的python安装路径下,我这里是假设你已经安装好了python并且Python安装路径已经被添加到了path环境变量下)

    github项目地址(系列文章包含常见第三库的使用与爬虫,会持续更新)

最新文章

  1. python 数据结构 初学时没太注意却发现很有用的点点滴滴
  2. MyEclipse Spring 学习总结三 SpringMVC 表单处理
  3. Oracle 增加修改删除字段与添加注释
  4. macbook air电池保养方法
  5. codeforces A. Strange Addition 解题报告
  6. native app
  7. Java中的面向对象
  8. ie11下,插入框架Html
  9. Windows平台Oracle使用USE_SHARED_SOCKET角色
  10. CSS深入理解学习笔记之float
  11. POJ 2195 Going Home (费用流)
  12. ZFS建池建卷和格式化
  13. Spring的注解@Qualifier小结
  14. xlsx批量转为utf8的csv
  15. 05 Activity 现场保护
  16. eclipse 内存优化
  17. Oracle12c的安装
  18. 无线网络中信噪比(SNR)计算
  19. python接口自动化测试(七)unittest 生成测试报告
  20. win10总是2分钟就自动睡眠怎么办 win10系统自动休眠bug怎么解决(转)

热门文章

  1. VS2010中的sln,suo分别是什么含义
  2. Apache Tomcat Nginx的区别和联系
  3. 【bzoj1692】[Usaco2007 Dec]队列变换 贪心+后缀数组
  4. P2845 [USACO15DEC]Switching on the Lights 开关灯
  5. P3385 【模板】负环
  6. 【刷题】UOJ #79 一般图最大匹配
  7. [洛谷P4081][USACO17DEC]Standing Out from the Herd
  8. [洛谷P4139]上帝与集合的正确用法
  9. [六省联考2017]分手是祝愿 期望DP
  10. BZOJ1834 [ZJOI2010]network 网络扩容 【最大流,费用流】