免責事項:
、学習目的このブログの読者だけの知識を爬虫類自分のために違法な手段とは何の関係も、学ぶことを歓迎し、私はコードの最終的な解釈を持っている読者はコードのいずれかを使用する必要がある場合は、コメントの作者に明記してください。このページTKSからヤンWenhao!!。
この記事では、私はすべてのレコード会ったピット扱う
完全なコード端に取り付けを
記事のディレクトリ
必要な分析ログインする最初のステップ
パラメトリック解析
①まず、ローカルポストのログインデータをチェックし
、我々はそれを得たFDのパケットキャプチャによって② http://zhjw.scu.edu.cn/j_spring_security_check
以下に示すように、この記事のURL内のデータ、その後、我々は内部のパラメータを見て、j_username
プレーンテキスト、j_password
それがページ上で行われるべきファイルを推測するために応答して、コンテンツを暗号化されています私たちは答える必要が
、我々は次のタスクは、検証コードを取得することでしたので、私たちのパスワードは、単に、それは非常に簡単です、MD5暗号化を実行することを見つけ、次の図の
③検証コードについての質問に、実際には、2つの方法があります、最初のシミュレートブラウザの動作にセレンと、これは我々が何をしたい、遅すぎるではない、我々は要求モジュールによって、必要な答えを取得したいです
第二段階認証コード
まず、利用可能な要素を検討するアドレス検証コード要求を取得する必要があります/img/captcha.jpg
し、我々はこのアカウントに代わって、クッキーを持参しなければなりません確認コードを要求するときに、ここで前提を言うために、当然のことながら、最初のコードを書き始めるあなたの唯一の基準である、またはにとき無用クッキーへの要求は、ピットが検出されました!!!
優れたケースであることはセッション状態を維持するためにセッションを使用すること
r = session.get('http://202.115.47.141/img/captcha.jpg', headers=headers_for_captcha)
with open('captcha.jpg','wb+') as f:
f.write(r.content)
その後、我々は、各実行はOKK、同じではありませんが、それはあなたが、それは間違っているだろう投稿することができそうということであれば、見つかった、CAPTCHAの画像を開くに行きましたここにピットで確認コードを取得することは、非常にユニークです、F12は真実見るためにあなたを取る
ので、今、私たちはそれを打つ、また、乱数を上演し、要求に戻って取得していません
soup = BeautifulSoup(r.text, 'lxml')
captcha_url = soup.find("img", id="captchaImg")['src']
# 链接来自url中算法
url_captcha = 'http://202.115.47.141' + captcha_url + '?' + str(random.randint(1, 100))
第三段階:ログイン
問題なし喜喜ので、次の唯一のあなたはパラメータの組み合わせを必要とする、もちろん、手動で特に厄介な、我々が使用しているされるたびにコードを開いてPIL
、それを
data = {
'j_username': username,
'j_password': password,
'j_captcha': captcha
}
r = session.post(url_login, headers=headers_for_captcha, data=data)
return r.request.headers['Cookie']
プログラムが再び実行されているような、右の成功は、その後、最後に来ました!
付録:完全なコード
import requests
import hashlib
import random
from PIL import Image
from bs4 import BeautifulSoup
def captcha_get():
username = '学号'
password = hashlib.md5(b'密码').hexdigest()
url = 'http://202.115.47.141'
url_login = 'http://zhjw.scu.edu.cn/j_spring_security_check'
session = requests.session()
headers_for_captcha = {
'Host': '202.115.47.141',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3754.400 QQBrowser/10.5.4034.400',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Referer': 'http://202.115.47.141/login?errorCode=badCaptcha',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
r = session.get(url, headers=headers_for_captcha)
soup = BeautifulSoup(r.text, 'lxml')
captcha_url = soup.find("img", id="captchaImg")['src']
# 链接来自url中算法
url_captcha = 'http://202.115.47.141' + captcha_url + '?' + str(random.randint(1, 100))
r = session.get(url_captcha, headers=headers_for_captcha)
print(r.url)
with open('captcha.jpg', 'wb+') as f:
f.write(r.content)
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
print(u'请到 根目录找到captcha.jpg 手动输入')
captcha = input("please input the captcha\n>")
data = {
'j_username': username,
'j_password': password,
'j_captcha': captcha
}
r = session.post(url_login, headers=headers_for_captcha, data=data)
return r.request.headers['Cookie']
if __name__ == '__main__':
print(captcha_get())