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 16 Python
python利用datetime模块计算时间差
Aug 04 Python
python编程实现归并排序
Apr 14 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
10行Python代码计算汽车数量的实现方法
Oct 23 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 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
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php判断linux下程序问题实例
2015/07/09 PHP
php实现的生成排列算法示例
2019/07/25 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
js实现日历与定时器
2017/02/22 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python简单获取数组元素个数的方法
2015/07/13 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
技校学生个人职业生涯规划范文
2014/03/03 职场文书
广告语设计及教案
2014/03/21 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
森林病虫害防治方案
2014/06/02 职场文书
语文教育专业求职信
2014/06/28 职场文书
销售顾问工作计划书
2014/08/15 职场文书
导游词300字
2015/02/13 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
vue使用echarts实现折线图
2022/03/21 Vue.js