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程序与C++程序的联合使用
Apr 07 Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
python基于http下载视频或音频
Jun 20 Python
python hook监听事件详解
Oct 25 Python
Django框架自定义session处理操作示例
May 27 Python
Python字符串的一些操作方法总结
Jun 10 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
python判断变量是否为列表的方法
Sep 17 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python中str内置函数用法总结
Dec 27 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
Apache中php.ini的设置方法
2013/02/28 PHP
PHP swfupload图片上传的实例代码
2013/09/30 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
JavaScript面向对象的实现方法小结
2015/04/14 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
Python中音频处理库pydub的使用教程
2017/06/07 Python
Python实现通讯录功能
2018/02/22 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
幼儿园家长寄语
2014/04/02 职场文书
小学教师师德承诺书
2014/05/23 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
故宫的导游词
2015/01/31 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang