持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 10 天,点击查看活动详情
1 前言
Selenium 在开发眼中是一款非常好用的测试框架,但是其还可以作为一款爬虫工具来使用,在本文中将使用用户登录这一经典场景来介绍 Selenium 的具体使用方法。
2 Selenium 的使用方法
在项目中使用 Selenium,需要有两个前提条件,一是需要下载安装 selenium 类库,二是需要下载对应的 chrome 文件(这里使用谷歌浏览器来进行操作)
# 安装 selenium 类库
pip install selenium
# 安装 ddddocr类库用于识别验证码的数字信息
pip install ddddocr
# chrome 下载地址,将下载后的 chromedriver.exe
https://registry.npmmirror.com/binary.html?path=chromedriver/
第一步我们需要获取浏览器的窗口,可以通过以下方式获取一个浏览器实例
browser = Service("./chromedriver.exe")
driver = webdriver.Chrome(service=browser)
selenium 获取到浏览器后,可以通过 get 方式来获取页面信息,如下图所示:
在获取到浏览器页面信息后,可以通过 driver.find_element 的方式来获取信息,即通过 id 来查询 input 框信息,然后调用 send_keys 来键入账号和密码信息。
这里有一个技术难点,就是如何识别验证码信息,在这里采用的是 ddddocr 类库来识别验证码的数字信息。
# 这里获取到验证码的标签后,通过 screenshot 来存储元素信息,即存储了验证码的图片
kaptchaImage.screenshot('./verify_code.png')
# 通过 classification 方法来识别验证码
ocr = ddddocr.DdddOcr()
with open('./verify_code.png', 'rb') as f:
img_bytes = f.read()
code = ocr.classification(img_bytes)
最后我们通过键入验证码信息,即可实现登录
# 用户的登录操作,根据id 找到登录的元素,然后模拟操作 click 即可
driver.find_element(By.ID, "button").click()
最后登录后即可得到主页面信息
3 Selenium 的其它操作
关于 selenium 的操作,还有一些其它的问题,比如如何获取到当前页面的 url 信息,如何获取当前会话的信息,因为 selenium 是一些页面的操作,但是如果操作接口的话,就需要获取当前的会话信息,才能调用后台接口。
# 获取当前页面的 url 信息
driver.current_url
# 获取当前会话的 cookie 信息, 并进行数据拼装
lst = driver.get_cookies()
cok = [item["name"] + "=" + item["value"] for item in lst]
# 计算 cookie cookie
cook_str = ';'.join(itm for itm in cok)
现在问题又来了,已经得到了请求的 cookie 信息,那么如何获取到请求头信息呢,这就需要安装另外一个依赖:
pip install selenium-wire
# 前者是之前引入 webdriver 的方式,如果获取请求头信息需要使用另外一种方式
from seleniumwire import webdriver
from selenium import webdriver
# 获取第一个请求的响应头信息
stl = driver.requests[0].response.headers
4 总结
在本文中介绍了如何使用 selenium 进行用户登录的操作,以及获取 selenium 会话和请求响应头信息,其中涉及到了如何识别验证码的内容,这在数据爬虫中是很常见的操作,希望对大家有所帮助。