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 Selenium爬取内容并存储至MySQL数据库的实现代码
Mar 16 Python
python和ruby,我选谁?
Sep 13 Python
python+pygame简单画板实现代码实例
Dec 13 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
python3安装speech语音模块的方法
Dec 24 Python
python 切换root 执行命令的方法
Jan 19 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
如何卸载python插件
Jul 08 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+xslt在windows平台上
2006/10/09 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
js精度溢出解决方案
2012/12/02 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
分享javascript实现的冒泡排序代码并优化
2016/06/05 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
vue中的计算属性实例详解
2018/09/19 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python实时监控cpu小工具
2018/06/21 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
智能电子应届生求职信
2013/11/10 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
大学活动总结格式
2014/04/29 职场文书
教研活动主持词
2015/07/03 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android