Disclaimer:
este blog leitores fins de aprendizagem únicos répteis conhecimento, nada a ver com quaisquer meios ilegais para mim, bem-vindo para aprender, tenho a interpretação final do código, se os leitores precisam usar um dos códigos, por favor, indicar no comentário do autor: Yang Wenhao desta página Tks! ! .
Este poço artigo trata eu tinha conhecido todos os registros
anexados ao fim o código completo
Diretório do artigo
O primeiro passo na análise Login obrigatório
análise paramétrica
① Em primeiro lugar, verifique os dados de login do correio local
② por captura de pacotes FD que chegamos aos http://zhjw.scu.edu.cn/j_spring_security_check
dados deste URL post, como mostrado abaixo, e então olhamos para os parâmetros dentro, j_username
texto simples, j_password
que é criptografada com conteúdo, em resposta a adivinhar quais arquivos devem ser feitas na página precisamos responder
a figura a seguir, vemos que a nossa senha simplesmente executar a criptografia md5, é muito simples, de modo a próxima tarefa era fazer com que o código de verificação
③ perguntas sobre o código de verificação, na verdade, existem duas maneiras , primeiro com selênio para o comportamento do navegador de simulação, mas isso é muito lento, não o que queremos, queremos obter a resposta que você quer pelo módulo de solicitações
Os códigos de verificação segunda etapa
Primeiro temos de obter o pedido de endereço código de verificação para rever os elementos disponíveis /img/captcha.jpg
, em seguida, começar a escrever código em primeiro lugar, é claro, para dizer a premissa aqui ao solicitar um código de verificação deve trazer biscoito, em nome desta conta é o seu único critério, ou para quando a solicitação para o cookie inútil, o poço foi encontrado! ! !
Sendo esse o caso melhor usar a sessão para manter o estado da sessão
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)
Depois fomos para abrir a imagem CAPTCHA, encontrado cada corrida não é o mesmo, okk, mas se é assim que você pode publicá-la seria errado, aqui é um poço , que você obtenha verificação códigos é muito original , F12 levá-lo para ver a verdade
que não, voltar com pedidos também foi palco de um número aleatório, então agora nós apenas vencê-lo
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))
O terceiro passo: Log
Portanto, não hee problema hee, junto só você precisa de uma combinação de parâmetros, é claro, abrir manualmente cada código de tempo é particularmente problemático, estamos usando PIL
-o
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']
Tal programa está sendo executado novamente, o sucesso da direita, em seguida, chegou ao fim!
Apêndice: O código completo
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())