1 简介
自动登录脚本在一些需要频繁登录场景中非常有用,之前上学的时候用过中国联通wifi自动重连的一个脚本(Github传送门),感觉非常好用,点赞!
这里的简单登录脚本主要通过Python调用Selenium WebDriver的API进行实现,对于验证码自动识别这里主要借助前不久开放的百度AI的文字识别功能。
- Selenium 是Thoughtworks推出的一个web自动化测试框架,WebDriver可以驱动Firefox、Chrome、IE、Edge、Safari等多种浏览器,Selenium通过 WebDriver驱动与浏览器进行交互。
- 百度AI之文字识别:支持多场景下的文字检测识别,中英混合识别,整体识别准确率高达90%以上。详细请访问百度OCR的官方介绍。
环境准备:
安装Selenium:
1 |
pip install selenium |
下载webdriver驱动:
百度AI OCR SDK下载安装:
http://ai.baidu.com/sdk#sdk-category-ocr
1 2 |
python setup.py build python setup.py install |
2 脚本
一个简单的登录VPN的例子,驱动IE浏览器,首先经过https非安全证书确认。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Ie('C:\Program Files\IEDriverServer_Win32_3.4.0\IEDriverServer.exe') driver.get("https://XXX.XXX.XXX.XXX/ssl/user/auth/home") # 确认进入不安全的链接 elem_click = driver.find_element_by_name("overridelink") elem_click.click(); # 用户名 密码 elem_user = driver.find_element_by_name("account") elem_user.send_keys("name") elem_pwd = driver.find_element_by_name("password") elem_pwd.send_keys("youneverguess") elem_pwd.send_keys(Keys.RETURN) time.sleep(5) assert "SSLVPN" in driver.title driver.close() driver.quit() |
一个自动识别验证码的登录例子,验证码图片是通过截图获取,然后调用百度AI开放平台的文字识别功能,然后进行自动登录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from PIL import Image,ImageEnhance from aip import AipOcr driver = webdriver.Chrome('C:\Program Files (x86)\chromedriver_win32\chromedriver.exe') driver.get("http://XXXXXXXXXXXXX/login.html") # 验证码截图 snap_image = 'D:\shotsnap.png' code_image = 'D:\image_code.png' driver.get_screenshot_as_file(snap_image) im = Image.open(snap_image) box = (1120,470,1230,507) region = im.crop(box) #region.show() region.save(code_image) # 百度开发者信息 APP_ID = '*****' API_KEY = 'XXXXXXXXXXXXX' SECRET_KEY = 'XXXXXXXXXXXXXXXX' # 读取验证码文件 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() # 百度OCR识别验证码 aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY) result = aipOcr.basicGeneral(get_file_content(code_image)) code = result.get(u'words_result')[0].get(u'words') print code # 自动登录 elem_user = driver.find_element_by_id("tbxUserName") elem_user.send_keys("XXXXXXXXXXXXXXXXXX") elem_pwd = driver.find_element_by_id("tbxPassword") elem_pwd.send_keys("XXXXXXXXXXXXXXXXXXXX") elem_verify_code = driver.find_element_by_id("tbxCaptcha") elem_verify_code.send_keys(code) elem_pwd.send_keys(Keys.RETURN) time.sleep(5) assert "baidu" in driver.title driver.close() driver.quit() |
登录效果如下图:
3 讨论
百度文字识别部分也可以调用在线REST服务使用,省去了安装SDK的步骤,验证码图片噪声较多时,识别率会大大下降。
4 参考
http://blog.csdn.net/mrlevo520/article/details/51901579
Hi,
I enjoyed your article on http://104.194.84.17/index.php/2017/08/08/yi-ge-jian-dan-di-python-zi-dong-deng-lu-jiao-ben/. I especially liked how lucid the article was.
I gather you have linked to http://selenium-python.readthedocs.io/ from that page.
Would you consider linking to us?
Here is our link – Selenium
I did be happy to share your page with our 30k Facebook/Twitter/Linkedin Followers.
Regards,
Alex