下面是详细的“selenium+超级鹰实现模拟登录12306”的攻略。
简介
在这个攻略中,我们将讲解如何使用selenium和超级鹰实现模拟登录12306。详情如下:
- 首先,我们将介绍selenium和超级鹰的简介和安装方法。
- 其次,我们将介绍如何使用selenium进行浏览器模拟操作。
- 然后,我们将介绍如何结合超级鹰破解验证码。
- 最后,我们将给出完整的代码和示例。
Selenium 和超级鹰的简介和安装方法
Selenium
Selenium是一个自动化测试工具,它可以模拟真实的浏览器行为,并且可以执行与浏览器交互的测试和其他任务。Selenium支持多种语言,如Java、Python等。在这个攻略中,我们使用Python的Selenium 库。
安装Selenium库:
pip install selenium
超级鹰
超级鹰是一个免费的验证码破解服务平台。它可以帮助我们快速地破解各种类型的验证码,包括字母数字验证码、滑动验证码和混合验证码等。
安装超级鹰库:
pip install chaojiying
注:使用超级鹰需要在官网上注册并申请Key和用户名。
使用Selenium进行浏览器模拟操作
在进行模拟登录12306前,我们需要先了解如何使用Selenium进行浏览器模拟操作。在这里,我们以Chrome浏览器为例进行说明。Selenium 为我们提供了操作 Chrome 的工具。
首先,打开Chrome浏览器,并输入如下命令控制chrome浏览器打开网站:
from selenium import webdriver
driver = webdriver.Chrome() #打开chrome浏览器
driver.get('https://www.baidu.com') #访问百度首页
运行这段代码,我们可以看到Chrome浏览器自动打开,并且访问了百度首页。
如果我们想查找页面上的某些元素,例如在百度首页上查找输入框并进行搜索操作,则代码如下:
from selenium.webdriver.common.by import By
driver.find_element(By.ID, 'kw').send_keys('12306') #输入搜索关键字
driver.find_element(By.ID, 'su').click() #点击搜索按钮
上面的代码中,我们使用了By
模块查找页面元素,其中By.ID
表示通过元素id进行查找,kw
和su
分别是百度搜索框和搜索按钮的id。
在模拟登录12306时,我们需要通过如上方法找到登录页面的输入框并输入用户名和密码,然后点击登录按钮。
结合超级鹰破解验证码
在模拟登录12306时,我们需要输入验证码。在这里,我们使用超级鹰服务来破解验证码。
超级鹰的使用具体如下:
import chaojiying
chaojiying = chaojiying.Chaojiying_Client('username', 'password', 'software_ID') #初始化超级鹰账号信息
im = open('captcha.gif', 'rb').read() #读取验证码图片
result = chaojiying.PostPic(im, 1902) #提交验证码到超级鹰服务器进行识别
print(result['pic_str']) #获取识别结果
上面的代码中,我们通过Chaojiying_Client
函数初始化超级鹰的账号信息,其中username
和password
是超级鹰账号的用户名和密码,software_ID
是软件ID。我们读取图片并使用PostPic
函数将图片发送到超级鹰服务器进行识别,最终获取识别结果。
实际上,在12306模拟登录时,12306的验证码是通过浏览器生成的,我们可以通过selenium获取页面验证码的图片,并通过上述代码将图片识别结果返回。
完整代码和示例
下面是完整的代码和示例,其中代码包含了Selenium的模拟登录和超级鹰的验证码破解过程。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
import chaojiying
# 初始化超级鹰账号信息
CJ_USERNAME = 'your_account'
CJ_PASSWORD = 'your_password'
CJ_SOFT_ID = 'your_soft_id'
chaojiying = chaojiying.Chaojiying_Client(CJ_USERNAME, CJ_PASSWORD, CJ_SOFT_ID)
# 打开Chrome浏览器
browser = webdriver.Chrome()
# 进入12306登录页面
browser.get("https://kyfw.12306.cn/otn/login/init")
# 等待页面元素加载完成
time.sleep(2)
# 输入用户名和密码
browser.find_element(By.ID, 'username').send_keys('your_username')
browser.find_element(By.ID, 'password').send_keys('your_password')
# 获取验证码图片,并保存为本地文件
captchaImage = browser.find_element(By.ID, 'J-loginImg')
captchaImage.screenshot('captcha.png')
# 通过超级鹰识别验证码,并输入验证码
im = open('captcha.png', 'rb').read()
result = chaojiying.PostPic(im, 1902)
print(result['pic_str'])
captchaInput = browser.find_element(By.ID, "J-loginImgPsg")
captchaInput.send_keys(result['pic_str'])
# 点击登录按钮
browser.find_element(By.ID, 'loginSub').click()
# 等待页面跳转
time.sleep(5)
# 获取登录状态
status = browser.execute_script('return JSON.parse(document.getElementById("result_message").innerText)["status"]')
# 获取登录状态信息
msg = browser.execute_script('return JSON.parse(document.getElementById("result_message").innerText)["msg"]')
# 输出登录结果
print(msg)
print(status)
# 关闭浏览器
browser.quit()
在代码中,我们首先打开 Chrome 浏览器,然后进入 12306 登录页面。接着,我们使用 find_element(By.ID, 'username')
、find_element(By.ID, 'password')
等函数找到了登录时的用户名、密码和验证码输入框,并执行了相关操作,其中验证码图片是通过screenshot()
截图保存的本地文件。
获取验证码图片之后,我们使用超级鹰服务对验证码进行识别,并将识别结果输入到页面上,然后执行click()
函数模拟触发登录按钮并等待页面跳转。
最后,我们通过 JavaScript 代码获取登录状态,判断是否成功。如果登录成功,则获取登录信息并打印,最后关闭浏览器窗口。
综上所述,我们通过以上方法可以轻松使用Selenium
和超级鹰
实现模拟登录12306
的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:selenium+超级鹰实现模拟登录12306 - Python技术站