Selenium自動ログイン12306 cookiesを取得
21201 ワード
Selenium自動ログイン12306 cookiesを取得 ツール 基本構想: コード
最近爬虫類を勉強して、自動認識認証コードを専門にしているサイトがあることを知ったので、12306の認証コードを試してみたいと思っています.
ツール
:Selenium、python、スーパーイーグル
基本的な考え方:
1.seleniumツールを使用して12306にアクセスする2.ユーザー名とパスワードを自動的に入力する3.認証コードピクチャを取得する4.スーパーイーグルが提供するAPI識別認証コードを使用する5.座標をクリックする
スーパーイーグルが提供するルーチンAPIで直接変更するのは簡単なようです.ソース:
コード#コード#
1元1000分、9004型は1回25分、価格はかなり安いようです.テストでもっと高い9201型を使ったことがあります.1~5個の対象を識別できますが、結果は識別が間違っていて、少し退屈で、半額の9004型で何回もテストしても識別に成功しました.
最近爬虫類を勉強して、自動認識認証コードを専門にしているサイトがあることを知ったので、12306の認証コードを試してみたいと思っています.
ツール
:Selenium、python、スーパーイーグル
基本的な考え方:
1.seleniumツールを使用して12306にアクセスする2.ユーザー名とパスワードを自動的に入力する3.認証コードピクチャを取得する4.スーパーイーグルが提供するAPI識別認証コードを使用する5.座標をクリックする
スーパーイーグルが提供するルーチンAPIで直接変更するのは簡単なようです.ソース:
コード#コード#
#!/usr/bin/env python
# coding:utf-8
from selenium import webdriver
import time
import requests
from hashlib import md5
import re
import base64
from selenium.webdriver.common.action_chains import ActionChains
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_id
self.base_params = {
'user': self.username,
'pass2': self.password,
'softid': self.soft_id,
}
self.headers = {
'Connection': 'Keep-Alive',
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
}
def PostPic(self, im, codetype):
"""
im:
codetype: http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {
'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
return r.json()
def ReportError(self, im_id):
"""
im_id: ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json()
class Login:
def __init__(self, url, username, passwd):
self.url = url
self.username = username
self.passwd = passwd
def login(self):
self.browser = webdriver.Chrome()
self.browser.get(self.url)
time.sleep(2)
login_select = self.browser.find_element_by_class_name('login-hd-account')
login_select.click()
user = self.browser.find_element_by_id('J-userName')
word = self.browser.find_element_by_id('J-password')
user.send_keys(self.username)
word.send_keys(self.passwd)
def get_pic(self):
tag = self.browser.find_element_by_class_name('imgCode')
temp = tag.get_attribute('src')
b64_pic = re.sub(r'data:image/jpg;base64,', '', temp)
pic = base64.b64decode(b64_pic)
return pic
def click(self, j):
temp = j.get('pic_str')
locations = [list(map(int, i.split(','))) for i in temp.split('|')] # [[11, 22], [33, 44]]
for location in locations:
ActionChains(self.browser).move_to_element_with_offset(self.browser.find_element_by_class_name('imgCode'),
location[0], location[1]).click().perform()
time.sleep(1)
self.browser.find_element_by_id('J-login').click()
def get_cookies(self):
return self.browser.get_cookies()
if __name__ == '__main__':
a = Login('https://kyfw.12306.cn/otn/resources/login.html', '12306 ', ' ')
a.login()
time.sleep(2)
chaojiying = Chaojiying_Client(' ', ' ', ' id') # >> ID 96001
im = a.get_pic() # a.jpg WIN //
print(im)
z = chaojiying.PostPic(im, 9004)
print(z)
a.click(z) # 1902 >> 3.4+ print ()
print(a.get_cookies())
1元1000分、9004型は1回25分、価格はかなり安いようです.テストでもっと高い9201型を使ったことがあります.1~5個の対象を識別できますが、結果は識別が間違っていて、少し退屈で、半額の9004型で何回もテストしても識別に成功しました.