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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
极简的Python入门指引
Apr 01 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
python字典操作实例详解
Nov 16 Python
python实现音乐下载器
Apr 15 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 Python
python套接字socket通信
Apr 01 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中$_POST与php://input的区别实例分析
2015/01/07 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
javascript中常用编程知识
2013/04/08 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
JS实现提示框跟随鼠标移动
2019/08/27 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python爬豆瓣电影实例
2018/02/23 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
金融专业毕业生自荐信
2014/06/26 职场文书
个人道歉信大全
2019/04/11 职场文书
python基础之函数的定义和调用
2021/10/24 Python
你需要掌握的20个Python常用技巧
2022/02/28 Python
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers