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编程开发之日期操作实例分析
Nov 13 Python
Python作用域用法实例详解
Mar 15 Python
Python学生成绩管理系统简洁版
Apr 05 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
python输出带颜色字体实例方法
Sep 01 Python
Python表达式的优先级详解
Feb 18 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
Python Selenium异常处理的实例分析
Feb 28 Python
python实战之90行代码写个猜数字游戏
Apr 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
php中使用临时表查询数据的一个例子
2013/02/03 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php生成html文件方法总结
2014/12/01 PHP
php英文单词统计器
2016/06/23 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
javascript history对象详解
2017/02/09 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
Internet主要有哪些网络群组成
2015/12/24 面试题
Ejb技术面试题
2015/04/29 面试题
2014年班组工作总结
2014/11/20 职场文书
乱世佳人观后感
2015/06/08 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
python文件目录操作之os模块
2021/05/08 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python