微信登录每次要密码,Python实现每日微信自动打卡

2021-04-08 09:21 298 浏览量

众所周知,由于这种流行病,许多大学和公司都要求员工每天检查微信,以报告其当前的身体状况和面积。但是在大多数情况下,每日入住信息不会更改。我们要做的是输入正式帐户-自动登录点到检入页面-完成检入并重复操作。

在手机上进行这样的操作应该花费不到一分钟的时间,但是仍然有些人太懒或每天忘记这样做。因此,我考虑是否可以编写脚本以在PC端自动对卡进行打孔。

(此操作仅供参考,每个人仍应注意防疫,值机操作)

以下所有操作均以大学页面为例

1.准备代码

由于微信的普及,大学和公司基本上每天都在微信上签到,因此我们需要通过微信找到登录页面。

微信登录每次要密码

微信登录每次要密码

官方帐户进入签到页面

微信登录每次要密码

微信登录每次要密码

选择复制链接地址

我们最终希望以模拟的包裹递送方式登录,但是我们通常使用微信自动登录。显然,没有办法仅使用脚本自动登录到微信,因此我们需要找到一个页面,可以在其中首先输入帐户和密码。 (这是没有用的,因为经过实验,发现有效期少于2小时,并且每天都无法支持相同的登录方式进行检查)

这时,我们通过PC微信找到了该链接:**** app.i ****。info //#/,但是如果您直接使用浏览器打开该链接,它将跳至“请使用微信客户打开带有链接“。”的页面。

微信登录每次要密码

微信登录每次要密码

直接用浏览器打开时发生错误

因此,我们需要找到一种绕过此限制的方法。有两个想法:1.通过等待数据包捕获软件,查找其他登录页面。 2.模拟请求标题和微信浏览器的条目。但是,如前一篇文章所述,在尝试了创意2之后,整个过程确实可以完成,但是页面的有效期非常短,并且没有每天自动签入的方法,因此我们选择尝试创意1,或使用帐户密码登录。

按照想法1,我们打开并开始数据包捕获。然后我回到PC微信,以与之前相同的操作进入检入页面,然后自动登录,然后再次返回,发现刚才进入检入页面的所有操作均已记录。在软件中。下一步是根据url和请求标头之类的信息确定是否还有其他登录页面。

微信登录每次要密码

微信登录每次要密码

红色框显示数据包捕获

经过分析并尝试后,前两个链接将提示400或其他错误,但是当您尝试第三个链接时******。//,它将跳转到学校的统一登录页面,并且仍然可以在下面找到微信快速登录图表。通过此页面输入帐户密码后,浏览器会自动跳转到我们所需的卡页面。至此,我们已经在PC端实现了对微信签到页面的模拟登录。

微信登录每次要密码

微信登录每次要密码

统一的登录页面

微信登录每次要密码

微信登录每次要密码

浏览器成功登录到签入页面

第二步,我们需要查看如何在浏览器端完成签入。在手动签入操作之后,在浏览器的F12之后,我看到有四个php提供发布操作,通常我们的表单数据是通过post方法完成的。排除了之前存在的第一个和第二个php,因此我们强烈怀疑这是其余两个php完成的签入操作。

微信登录每次要密码

微信登录每次要密码

具体来看,发现最后一个jump.php实际上返回了用于自动填充的基本个人信息,而提交的表单与打孔无关。

微信登录每次要密码

微信登录每次要密码

最终的jump.php返回的结果

但是,当我们到达倒数第二个jump.php时,通过它提交的表单数据,我们发现正是通过此php我们才完成了插入操作。因此,我们的最终目标是通过此php完成我们的自动检入。至此,我们的代码前分析已全部完成,然后进入代码链接。

微信登录每次要密码

微信登录每次要密码

php(+纯版本)提交的倒数第二个表格2.的代码实现

(本文使用程序包来实现代码。)

因为我们已经通过浏览器登录并获得了它,所以我们首先尝试直接通过进行登录。首先通过浏览器F12获取其余的请求标头,然后根据需要将它们放在文件中。 (您可以在此处选择需要放置在请求标头中的内容,通常添加和User-,如果失败,也可以尝试使用ios的模拟请求替换User-)

微信登录每次要密码

微信登录每次要密码

右侧是请求标头

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
    'Cookie': '浏览器上找到的Cookie'
}

根据“来自数据”中的数据,按照字典格式将它们一一放入文件中。

微信登录每次要密码

微信登录每次要密码

来自数据数据

微信登录每次要密码

微信登录每次要密码

文件格式

最后尝试再次发布。发现最终返回值与浏览器返回值相同,并且签入成功。

微信登录每次要密码

微信登录每次要密码

返回值

微信登录每次要密码

微信登录每次要密码

浏览器返回值3.代码实现(帐户密码++版本)

上一篇文章已经认识到,如果您知道的话,可以直接通过固定的php页面上载并签入表单。但是,由于有效期非常短,我们显然需要一种方法来在每次打卡之前自动获取卡。

回到首页,我们还通过F12捕获数据包,以查看每次登录时提交的表单的具体值是什么。尝试输入用户名和密码并单击之后,我们会发现文件下的POST表单,其中包含我们每次登录时发送到服务器的信息。

微信登录每次要密码

登录信息

但是从表格中我们可以看到,除了我们填写的帐户和密码外,还包括lt等信息。搜索后,我们发现该信息是在加载网页时自动生成的,因此我们可以通过。()方法进入页面,然后通过正则表达式找出所需的信息,并与帐户密码一起形成表格。

微信登录每次要密码

微信登录每次要密码

页面上隐藏的元素

但是我们也可以看到它显然是加密的信息,因此我们不能直接以纯文本形式提交密码。我们必须找到一种处理密码的方法。这个加密的密码是单击“提交”后,网页会自动对我们的纯文本密码进行加密,因此它很可能是一个js进程,因此我们需要在网页上找到加密的js文件。搜索页面和js后,最终发现.js文件已完成对纯文本密码的加密。

微信登录每次要密码

微信登录每次要密码

加密的js

从逻辑上讲,我们现在可以找到传递js,获取加密密码并将其与其他信息一起发布所需的参数,以完成我们的登录和访问。但是,此js确实很长且令人困惑,并且无法在当前级别找到所需的参数。所以我改变了主意,并用它来模拟登录并直接获得它。

(在这里,如果您能理解此js加密,则无需依赖它即可获取它。如果您有兴趣,可以尝试一下)

这是相对简单的。通过分析登录页面,找到所需的地方,找到它,然后填写并得到它。

微信登录每次要密码

微信登录每次要密码

通过F12获取元素

def get_cookie(url_, user_):
    driver = webdriver.Chrome()
    driver.get(url_)
    driver.find_element_by_xpath('//*[@id="username"]').send_keys(user_['name'])
    driver.find_element_by_xpath('//*[@id="password"]').send_keys(user_['password'])
    driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[4]/button').click()
    sleep(3)
    cookie_ = driver.get_cookies()[0]
    driver.quit()
    return cookie_['name']+'='+cookie_['value']

获取后,操作与以前相同,只需提交表格,完整代码如下。

import requests
from selenium import webdriver
from time import sleep
def get_cookie(url_, user_):
    driver = webdriver.Chrome()
    driver.get(url_)
    driver.find_element_by_xpath('//*[@id="username"]').send_keys(user_['name'])
    driver.find_element_by_xpath('//*[@id="password"]').send_keys(user_['password'])
    driver.find_element_by_xpath('//*[@id="casLoginForm"]/p[4]/button').click()
    sleep(2)
    cookie_ = driver.get_cookies()[0]
    driver.quit()
    return cookie_['name']+'='+cookie_['value']
user = {'name': ******', 'password': '******'}
cookie = get_cookie('https://authserver.******.edu.cn/authserver/login?service=http://s******app.i******.info/jinzhi/index.php', user)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
    'Cookie': cookie
}
data = {
    'mymethod': 'POST',
    'myurl': '',
    'id': '',
    't1': '否',
    't2': '',
    't3': '否',
    'stsfyc': '否',
    'stsfycxq': '',
    'dqszdpro': '',
    'dqszdcity': '',
    'dqszdreg': '',
    'sfdgyq': '否',
    'dgyqqt': '[]'
}
url = 'http://******app.i******.info/jinzhi/jump.php'
s = requests.session()
response = s.post(url=url, headers=headers, data=data)
html = response.text
print(html)

4.摘要

实际上,在类似的要求中,代码部分相对较少。重要的是找到提交的表单数据和页面链接

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:微信登录每次要密码,Python实现每日微信自动打卡 |