在本篇文章里小编给大家整理的是一篇关于Python中免验证跳转到内容页的实例代码,有兴趣的朋友们可以学习分享下。
相信很多人在浏览网页时,经常会碰到需要输入验证码才可以继续浏览的情况吧,遇到这种问题,大多数人只能进行繁琐的注册验证,今天小编教大家只要使用python就可以免验证方法。
以经常用到的解答网站——上学吧为例,在网站里点击答案页面,会显示验证后才可以查看提示,下面就使用python实现跳过验证码。
我们需要通过python构造随机的 X-Forwarded-For 信息来绕过 ASP 网站的 IP 检测,可以实现对输入的网址正确性进行检查、对验证码核验不通过时的处理等等。
python免验证跳转页面代码如下:
# 绕过验证码无限次获取上学吧题目答案
# 上学吧网址:https://www.shangxueba.com/ask
importos
importrandom
importrequests
importurllib3
urllib3.disable_warnings()# 这句和上面一句是为了忽略 https 安全验证警告,参考:https://www.cnblogs.com/ljfight/p/9577783.html
frombs4importBeautifulSoup
fromPILimportImage
defget_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
withopen('temp.png','wb+')asf:
f.write(r.content)
image=Image.open('temp.png')
image.show()# 调用系统的图片查看软件打开验证码图片,如果不能打开,可以自己找到 temp.png 打开。
verifynum=input("\n请输入验证码图片中的计算结果:")
image.close()
os.remove("temp.png")
returnverifynum
defget_question(session):
r=session.get(link)
soup=BeautifulSoup(r.content,"html.parser")
description=soup.find(attrs={"name":"description"})['content']# 抓取题干内容
returndescription
defget_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()
whileTrue:
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/"orlink[-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 requestspip install beautifulsoup4
Python 脚本运行流程:
首先复制上学吧某道题目的网址,类似以下格式:
然后运行python脚本,复制粘贴网址。
按Enter键,自动下载验证码图片存为 temp.png,然后自动读取图片并展示,也可以手动打开同目录下的 temp.png 图片。
最后在命令行窗口输入验证码图片中的计算结果即可获取题目详情以及正确答案。
到此这篇关于Python中免验证跳转到内容页的实例代码的文章就介绍到这了
扫下方二维码加老师微信
或是搜索老师微信号:XTUOL1988【切记备注:学习Python】
领取Python web开发,Python爬虫,Python数据分析,人工智能等学习教程。带你从零基础系统性的学好Python!
也可以加老师建的Python技术学习教程qq裙:245345507,二者加一个就可以!
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
万水千山总是情,点个【在看】行不行
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜