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的Zato发送AMQP消息的教程
Apr 16 Python
python中字符串类型json操作的注意事项
May 02 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python 自动批量打开网页的示例
Feb 21 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
简单了解python代码优化小技巧
Jul 08 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Python 字典中的所有方法及用法
Jun 10 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 Python
Python运算符+与+=的方法实例
Feb 18 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 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 clearstatcache()函数详解
2010/03/02 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
js中this的用法实例分析
2015/01/10 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
js实现全选和全不选
2020/07/28 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
Python 文件和输入输出小结
2013/10/09 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python验证身份证信息实例代码
2019/05/06 Python
Django实现网页分页功能
2019/10/31 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
python爬取招聘要求等信息实例
2020/11/20 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
台湾三立电视电商平台:电电购
2019/09/09 全球购物
资料员岗位职责
2013/11/17 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
市场督导岗位职责
2015/04/10 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS