来源:完美世界私服 浏览次数: 发布时间:2022-06-26 19:16:26
# -*- coding:utf-8 -*-
import re
import os
import time
import json
import sys
import subprocess
import requests
import hashlib
from bs4 import BeautifulSoup
"""
info:
author:CriseLYJ
github:https://github.com/CriseLYJ/
update_time:2019-3-6
"""
class Lagou_login(object):
def __init__(self):
self.session = requests.session()
self.CaptchaImagePath = os.path.split(os.path.realpath(__file__))[0] + os.sep + 'captcha.jpg'
self.HEADERS = {'Referer': 'https://passport.lagou.com/login/login.html',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36'
' Core/1.53.4882.400 QQBrowser/9.7.13059.400',
'X-Requested-With': 'XMLHttpRequest'}
# 密码加密
def encryptPwd(self, passwd):
# 对密码进行了md5双重加密
passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
# veennike 这个值是在js文件找到的一个写死的值
passwd = 'veenike' + passwd + 'veenike'
passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
return passwd
# 获取请求token
def getTokenCode(self):
login_page = 'https://passport.lagou.com/login/login.html'
data = self.session.get(login_page, headers=self.HEADERS)
soup = BeautifulSoup(data.content, "lxml", from_encoding='utf-8')
'''
要从登录页面提取token,code, 在头信息里面添加
<script type="text/javascript">
window.X_Anti_Forge_Token = 'dde4db4a-888e-47ca-8277-0c6da6a8fc19';
window.X_Anti_Forge_Code = '61142241';
</script>
'''
anti_token = {'X-Anit-Forge-Token': 'None',
'X-Anit-Forge-Code': '0'}
anti = soup.findAll('script')[1].getText().splitlines()
anti = [str(x) for x in anti]
anti_token['X-Anit-Forge-Token'] = re.findall(r'= \'(.+?)\'', anti[1])[0]
anti_token['X-Anit-Forge-Code'] = re.findall(r'= \'(.+?)\'', anti[2])[0]
return anti_token
# 人工读取验证码并返回
def getCaptcha(self):
captchaImgUrl = 'https://passport.lagou.com/vcode/create?from=register&refresh=%s' % time.time()
# 写入验证码图片
f = open(self.CaptchaImagePath, 'wb')
f.write(self.session.get(captchaImgUrl, headers=self.HEADERS).content)
f.close()
# 打开验证码图片
if sys.platform.find('darwin') >= 0:
subprocess.cx5c r[p'6;-]l=09all(['open', self.CaptchaImagePath])
elif sys.platform.find('linux') >= 0:
subprocess.call(['xdg-open', self.CaptchaImagePath])
else:
os.startfile(self.CaptchaImagePath)
# 输入返回验证码
captcha = input("请输入当前地址(% s)的验证码: " % self.CaptchaImagePath)
print('你输入的验证码是:% s' % captcha)
return captcha
# 登陆操作
def login(self, user, passwd, captchaData=None, token_code=None):
postData = {'isValidate': 'true',
'password': passwd,
# 如需验证码,则添加上验证码
'request_form_verifyCode': (captchaData if captchaData != None else ''),
'submit': '',
'username': user
}
login_url = 'https://passport.lagou.com/login/login.json'
# 头信息添加tokena
login_headers = self.HEADERS.copy()
token_code = self.getTokenCode() if token_code is None else token_code
login_headers.update(token_code)
# data = {"content":{"rows":[]},"message":"该帐号不存在或密码错误,请重新输入","state":400}
response = self.session.post(login_url, data=postData, headers=login_headers)
data = json.loads(response.content.decode('utf-8'))
if data['state'] == 1:
return response.content
elif data['state'] == 10010:
print(data['message'])
captchaData = self.getCaptcha()
token_code = {'X-Anit-Forge-Code': data['submitCode'], 'X-Anit-Forge-Token': data['submitToken']}
return self.login(user, passwd, captchaData, token_code)
else:
print(data['message'])
return False
if __name__ == "__main__":
username = input("请输入你的手机号或者邮箱\n >>>:")
passwd = input("请输入你的密码\n >>>:")
lg = Lagou_login()
passwd = lg.encryptPwd(passwd)
data = lg.login(username, passwd)
if data:
print(data)
print('登录成功')
else:
print('登录不成功')
从标头的导入中,您需要安装和加载模块:
pip install beautifulsoup4
安装完成后,终端需要cd到脚本所在文件夹,执行脚本:
python Lagou.py
运行脚本后,需要输入一定的信息才能登录,非常方便周到:
登录后,您可以为所欲为。
3.基于模拟登录
一些网站的爬取并不是那么简单。他们会做权限验证和反爬机制。在这种情况下,我们可以使用它来解决一些困难和复杂的登录场景。
基于模拟登录稍微复杂一些,需要设置环境变量的路径。如果不设置,运行登录脚本时会报如下错误:
如何下载并设置环境变量?您可以在此处下载最新版本:
现在最新版本号为91.0.4472.101,下载链接如下:
可以看出,每个系统需要下载的版本不同,请下载您系统对应的指定版本。
对于 macOS 系统,mac64 和 是指使用不同芯片的 Mac 笔记本电脑。您可以在 Mac 上单击菜单栏左上角的 [Apple] 图标,然后选择“关于本机”选项。如果你看到下面写的芯片Apple M1完美国际外挂源代码,你应该下载版本。
如果你的网络有问题无法下载,没关系,关注实用收藏公众号,后台回复即可下载。我把这4个版本放在国内网盘上。
下载完成后,还需要设置环境变量
(macOS 系统)请像这样设置环境变量:
1. 将解压后的文件放在您不会经常更改的路径中
如/usr/local/bin/,需要输入+空格并打开终端(),执行如下命令:
cd /usr/local/bin/
open .
然后拖进去,就可以成功放进去了。
2.添加环境变量
要添加到环境变量,请在终端中键入以下命令:
export PATH=$PATH:/usr/local/bin/chromedriver
执行此步骤后,恭喜您成功安装 .
(系统)请像这样设置环境变量:
1.在左下角搜索环境变量,打开“编辑系统环境变量”选项:
2.设置环境变量:
如图所示,将您的主目录放入 PATH 变量中。比如我的.exe的路径是C:\Users\83493\\bin\.exe,那么这里应该填写C:\Users\83493\\bin路径。
设置完成后,您已经成功安装到电脑上。另外请注意,设置后需要重启终端或CMD才能使环境变量生效。
另外,如果你在使用的时候遇到类似如下的错误,也不要惊慌:
这是因为现在的版本是91,而你现在的版本是90,升级可以解决问题。
完成基本配置后,我们可以尝试运行QQ空间来模拟登录:
进入项目文件夹的文件夹:
cd awesome-python-login-model\qqzone
然后直接运行.py文件:
python qq_zone.py
将弹出一个浏览器并让您输入信息:
输入信息后,登录过程将正常进行:
看到上面的界面,就说明登录完成了。这个时候,一切都已经准备好了。您可以保存它并做任何您想做的事情。
如果你愿意研究作者的代码,你会发现其实很简单:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
info:
author:CriseLYJ
github:https://github.com/CriseLYJ/
update_time:2019-3-7
"""
import time # 用来延时
from selenium import webdriver
driver = webdriver.Chrome() # 选择浏览器,此处我选择的Chrome
QQ_NUMBER = input('请输入你的QQ号')
PASSWORD = input('请输入你的QQ密码')
driver.get('http://i.qq.com/')
driver.switch_to.frame('login_frame')
driver.find_element_by_id('switcher_plogin').click()
driver.find_element_by_name('u').clear()
driver.find_element_by_name('u').send_keys(QQ_NUMBER) # 此处输入你的QQ号
driver.find_element_by_name('p').clear()
driver.find_element_by_name('p').send_keys(PASSWORD) # 此处输入你的QQ密码
driver.execute_script("document.getElementById('login_button').parentNode.hidefocus=false;")
driver.find_element_by_xpath('//*[@id="loginform"]/div[4]/a').click()
driver.find_element_by_id('login_button').click()
time.sleep(10) # 因为我曾经是QQ会员,所以每次登陆时都会提醒我要不要再续费的弹窗...
driver.find_element_by_id('dialog_button_1').click() # 这个地方是我把那个弹窗给点击了,配合上面的延时用的,延时是等待那个弹窗出现,然后此处点击取消
btns = driver.find_elements_by_css_selector('a.item.qz_like_btn_v3') # 此处是CSS选择器
for btn in btns:
btn.click()
简单来说,代码分为4步,如下:
1.让用户输入QQ号和密码。
2.将浏览器焦点切换到登录框,选择要输入账号和密码的元素。
3.为了显示登录按钮,执行以下脚本:
driver.execute_script("document.getElementById('login_button').parentNode.hidefocus=false;")
4.点击确认按钮完成登录。
可见,基于它的自动化控制一点都不难。一旦熟悉了控制过程和相应的方法完美国际外挂源代码,就应该如鱼得水。这个自动化工具只要经过一开始的繁琐安装阶段,以后开发代码时参考别人的代码,就能熟练掌握。
总而言之,--login-model 是一个模拟登录的代码库,可以给你带来很多方便。您可以直接根据它提供的登录脚本进行开发,也可以参考这些脚本自己为其他网站编写模拟登录脚本。并向作者提交 PR。