问答详情

Python教程 如何免验证跳转到内容页?

421次观看
标签: 跳转到 教程 内容
老师回答

相信很多人在浏览网页时,经常会碰到需要输入验证码才可以继续浏览的情况吧,遇到这种问题,大多数人只能进行繁琐的注册验证,今天小编教大家只要使用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.htmlnn请输入:").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脚本,复制粘贴网址。

按Enter键,自动下载验证码图片存为 temp.png,然后自动读取图片并展示,也可以手动打开同目录下的 temp.png 图片。

最后在命令行窗口输入验证码图片中的计算结果即可获取题目详情以及正确答案。

以上就是PyThon免验证跳转内容页的全部内容了,感兴趣的小伙伴可以跟着教程实际操作~如需了解更多python实用知识,点击进入PyThon学习网教学中心

免费直播

    精选课程
    相关推荐
    python中sort()和sorted()使用有什么区别?
    付老师 Python编程

    python中有两种列表排序的方法,即sort() 和sorted() 。这两个方法看起来很像,但是有很大的差别。sort() 修改原列表,永久性排序,无返回值,内存消耗小,而sorted() 保持原列表不变,临时性排序,有返回值,内存消耗大。本文向大家详解这二者使用的区别。

    一、sort() 

    1、定义:python列表的一个内置的排序方法,只是列表的一个方法,只适用于列表;

    2、作用:作用于列表,直接修改原有列表,无返回值;

    3、排序时间:对列表进行永久性排序;

    4、内存消耗:无需保存原对象,节省内存空间。

    5、使用实例:

    list_name = [1, 3, 4, -0.2200222, -4.66]
    list_name.sort()
    print(list_name)

    输出

    [-4.66, -0.2200222, 1, 3, 4]
    原列表的值发生变化,原列表被修改

    二、sorted() 

    1、定义:python内置的一个排序函数,接受一切迭代器,返回一个有序的副本,并且类型总是列表;

    2、作用:作用于任意可迭代的对象,原有列表保持不变,会返回一个排序后的列表。

    3、排序时间:对列表进行临时排序。

    4、内存消耗:返回新对象,所以耗费较多资源。

    5、使用实例:

    list_name = [1, 3, 4, -0.2200222, -4.66]
    list_name_new = sorted(list_name)
    print(list_name)
    print(list_name_new)

    输出

    [1, 3, 4, -0.2200222, -4.66] 原列表
    [-4.66, -0.2200222, 1, 3, 4] 排序后的列表

    相比于sort(),sorted() 使用的范围更为广泛,但是sort()消耗内存比较小,效率也比较高。所以如果不需要保留原列表,sort更有效一点哦~

    注册电脑版

    版权所有 2003-2020 广州环球青藤科技发展有限公司