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自然语言编码转换模块codecs介绍
Apr 08 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
python斐波那契数列的计算方法
Sep 27 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python docutils文档编译过程方法解析
Jun 23 Python
django rest framework 自定义返回方式
Jul 12 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
5道关于python基础 while循环练习题
Nov 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
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
ThinkPHP空模块和空操作详解
2014/06/30 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
详解Python中time()方法的使用的教程
2015/05/22 Python
python选择排序算法实例总结
2015/07/01 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python能做什么 python的含义
2019/10/12 Python
python django中8000端口被占用的解决
2019/12/17 Python
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
师德个人剖析材料
2014/02/02 职场文书
会计学自我鉴定
2014/02/06 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
图书借阅制度范本
2015/08/06 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL