Python中免验证跳转到内容页的实例代码


Posted in Python onOctober 23, 2020

相信很多人在浏览网页时,经常会碰到需要输入验证码才可以继续浏览的情况吧,遇到这种问题,大多数人只能进行繁琐的注册验证,今天小编教大家只要使用python就可以免验证方法。

以经常用到的解答网站——上学吧为例,在网站里点击答案页面,会显示验证后才可以查看提示,下面就使用python实现跳过验证码。

Python中免验证跳转到内容页的实例代码

我们需要通过python构造随机的 X-Forwarded-For 信息来绕过 ASP 网站的 IP 检测,可以实现对输入的网址正确性进行检查、对验证码核验不通过时的处理等等。

python免验证跳转页面代码如下:

# 绕过验证码无限次获取上学吧题目答案
# 上学吧网址:https://www.shangxueba.com/ask
import os
import random
import requests
import urllib3
urllib3.disable_warnings() # 这句和上面一句是为了忽略 https 安全验证警告,参考:https://www.cnblogs.com/ljfight/p/9577783.html
from bs4 import BeautifulSoup
from PIL import Image
def get_verifynum(session): # 网址的验证码逻辑是先去这个网址获取验证码图片,提交计算结果到另外一个网址进行验证。
r = session.get("https://www.shangxueba.com/ask/VerifyCode2.aspx", verify=False) # HTTPS 请求进行 SSL 验证或忽略 SSL 验证才能请求成功,忽略方式为 verify=False。参考:https://www.cnblogs.com/ljfight/p/9577783.html
with open('temp.png','wb+') as f:
f.write(r.content)
image = Image.open('temp.png')
image.show() # 调用系统的图片查看软件打开验证码图片,如果不能打开,可以自己找到 temp.png 打开。
verifynum = input("\n请输入验证码图片中的计算结果:")
image.close()
os.remove("temp.png")
return verifynum
def get_question(session):
r = session.get(link)
soup = BeautifulSoup(r.content, "html.parser")
description = soup.find(attrs={"name":"description"})['content'] # 抓取题干内容
return description
def get_answer(session, verifynum, dataid):
data1 = {
"Verify": verifynum,
"action": "CheckVerify",
}
session.post("https://www.shangxueba.com/ask/ajax/GetZuiJia.aspx", data=data1) # 核查验证码正确性
data2 = {
"phone":"",
"dataid": dataid,
"action": "submitVerify",
"siteid": "1001",
"Verify": verifynum,
}
r = session.post("https://www.shangxueba.com/ask/ajax/GetZuiJia.aspx", data=data2)
soup = BeautifulSoup(r.content, "html.parser")
ans = soup.find('h6')
print("\n" + '-'*45)
if(ans): # 只有验证码核查通过才会显示答案
print("\n题目:" + get_question(session))
print(ans.text)
else:
print('\n没有找到答案!请检查验证码或网址是否输入有误!\n')
print('-'*45)
if __name__ == '__main__':
s = requests.session()
while True:
s.headers.update({"X-Forwarded-For":"%d.%d.%d.%d"%(random.randint(120,125),random.randint(1,200),random.randint(1,200),random.randint(1,200))}) # 这一句是整个程序的关键,通过修改 X-Forwarded-For 信息来欺骗 ASP 站点对于 IP 的验证。
link = input("\n请输入上学吧网站上某道题目的网址,例如:https://www.shangxueba.com/ask/8952241.html\n\n请输入:").strip() # 过滤首尾的空格
if(link[0:31] != "https://www.shangxueba.com/ask/" or link[-4:] != "html"):
print("\n网址输入有误!请重新输入!\n")
continue
dataid = link.split("/")[-1].replace(r".html","") # 提取网址最后的数字部分
if(dataid.isdigit()): # 根据格式,dataid 应该全部为数字,判断字符串是否全部为数字,返回 True 或者 False
verifynum = get_verifynum(s)
get_answer(s, verifynum, dataid)
else:
print("\n网址输入有误!请重新输入!\n")
continue

注意:其中 requests 和 beautifulsoup 两个库需要另外安装,建议使用 pip 方式安装:

pip install requests
pip install beautifulsoup4

Python 脚本运行流程:

首先复制上学吧某道题目的网址,类似以下格式:

Python中免验证跳转到内容页的实例代码

然后运行python脚本,复制粘贴网址。

Python中免验证跳转到内容页的实例代码

按Enter键,自动下载验证码图片存为 temp.png,然后自动读取图片并展示,也可以手动打开同目录下的 temp.png 图片。

Python中免验证跳转到内容页的实例代码

最后在命令行窗口输入验证码图片中的计算结果即可获取题目详情以及正确答案。

Python中免验证跳转到内容页的实例代码

到此这篇关于Python中免验证跳转到内容页的实例代码的文章就介绍到这了,更多相关Python如何免验证跳转到内容页内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python3中的json模块使用详解
May 05 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
Python 忽略文件名编码的方法
Aug 01 Python
python中turtle库的简单使用教程
Nov 11 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
python drf各类组件的用法和作用
Jan 12 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 #Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 #Python
详解python模块pychartdir安装及导入问题
Oct 22 #Python
Python实现自动装机功能案例分析
Oct 22 #Python
Python reversed反转序列并生成可迭代对象
Oct 22 #Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 #Python
Python类的继承super相关原理解析
Oct 22 #Python
You might like
解决中英文字符串长度问题函数
2007/01/16 PHP
php横向重复区域显示二法
2008/09/25 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
一段实时更新的时间代码
2006/07/07 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
JS作用域深度解析
2016/12/29 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
python第三方库学习笔记
2020/02/07 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
2016年春节慰问信息
2015/03/25 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
python process模块的使用简介
2021/05/14 Python
Python socket如何解析HTTP请求内容
2022/02/12 Python
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js