Selenium 的使用
Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript 动态渲染的页面来说,此种抓取方式非常有效。
好处:不用再分析网站复杂的通信流程了
坏处:效率低
一般用在登录环节。
1、准备工作
安装Chrome浏览器
配置ChromeDriver
另外安装Python的Selenium库
2、基本使用
Selenium一些功能,示例如下:
from selenium import webdriver #用来驱动浏览器驱动 from selenium.webdriver import ActionChains #滑动验证码的时候用。拖拽滑动验证码进行移动 from selenium.webdriver.common.by import By #指定查找的方式 提交请求的过程当中,定位到页面中某一个标签。比如输入,就要找到输入的标签,往输入标签丢一些值给它, from selenium.webdriver.common.keys import Keys #键盘操作,比如回车操作 from selenium.webdriver.support import expected_conditions as EC #跟WebDriverWait连在一起用 from selenium.webdriver.support.wait import WebDriverWait #跟EC连在一起用 等页面加载
程序运行关掉了,浏览器也要关掉,不然后台会运行一堆浏览器。
也有可能用驱动发起请求的时候遇到错误了,出错可能在某一行抛异常了,就执行不到关掉浏览器的那行代码。所以try把爬取的逻辑放到里面去。示例如下:
from selenium import webdriver #用来驱动浏览器驱动 import time brower = webdriver.Chrome() try: brower.get(‘https://baidu.com‘) time.sleep(6) finally: brower.close()
基本使用演示:
from selenium import webdriver #用来驱动浏览器驱动 from selenium.webdriver import ActionChains #滑动验证码的时候用。拖拽滑动验证码进行移动 from selenium.webdriver.common.by import By #指定查找的方式 提交请求的过程当中,定位到页面中某一个标签。比如输入,就要找到输入的标签,往输入标签丢一些值给它, from selenium.webdriver.common.keys import Keys #键盘操作,比如回车操作 from selenium.webdriver.support import expected_conditions as EC #跟WebDriverWait连在一起用 from selenium.webdriver.support.wait import WebDriverWait #跟EC连在一起用 等页面加载 import time browser = webdriver.Chrome() try: wait = WebDriverWait(browser,4) # #发请求 browser.get(‘https://baidu.com‘) #获取输入框 input_tag = wait.until(EC.presence_of_element_located((By.ID,‘kw‘))) #输入内容 input_tag.send_keys(‘种花‘) #键盘操作回车 input_tag.send_keys(Keys.ENTER) time.sleep(6) finally: browser.close()
运行代码后发现,会自动弹出一个Chrome浏览器。浏览器首先会跳到百度,然后在搜索框中输入种花,接着跳转到搜索结果页,如图
在控制台分别会输出当前的URL、当前的Cookies和网页源代码,然后发现跟浏览器中的一模一样。
print(browser.current_url) print(browser.get_cookies()) print(browser.page_source)
所以说,如果用Selenium 来驱动浏览器加载网页的话,就可以直接拿到JavaScript渲染的效果了,不用担心使用的什么加密系统。
下面来详细介绍Selenium 的用法:
3、声明浏览器对象
Selenium 支持非常多的浏览器。如Chrome,Firefox,Edge等,还有Android,BlackBerry等手机端的浏览器。另外还支持无界面浏览器PhantomJS。
此外,我们可以用如下方式初始化:
from selenium import webdriver
browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() browser=webdriver.Safari() browser=webdriver.Edge()
这样就完成了浏览器对象的初始化并将其赋值为browser对象。接下来,我们要做的就是调用browser对象,让其执行各个动作以模拟浏览器操作。
4、访问页面
5、查找节点
6、节点交互
7、动作链
8、执行JavaScript
9、获取节点信息
10、切换Frame
11、延时等待
12、前进和后退
13、Cookies
14、选项卡管理
15、异常处理