Python中免验证跳转到内容页的实例代码

在本篇文章里我整理的是一篇关于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脚本,复制粘贴网址。

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

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

到此这篇关于Python中免验证跳转到内容页的实例代码的文章就介绍到这了

在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#coding:utf-8 import time import webbrowser as web import os import random #随机选择一个浏览器打开网 def open_url_use_random_browser(): #定义要访问的地址 url='http://www.baidu.com' #定义浏览器路径 browser_paths=[r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe', #r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', #r'C:\Program Files (x86)\Opera\launcher.exe', #r'C:\Users\Administrator\AppData\Roaming\qianying\qianying.exe', #r'C:\Users\Administrator\AppData\Local\115Chrome\Application\115chrome.exe', #r'C:\Program Files (x86)\Internet Explorer\iexplore.exe', #r'D:\Program Files(x86)\SouExplorer\SogouExplorer\SogouExplorer.exe' ] #选择一个浏览器 def chose_a_browser_open_url(browser_path,url): #如果传入的浏览器位置不存在,使用默认的浏览器打开 if not browser_path: print ('using default browser to open') web.open_new_tab(url)#使用默认浏览器,就不再结束进程 else: #判断浏览器路径是否存在 if not os.path.exists(browser_path): print ('current browser path not exists,using default browser') #浏览器位置不存在就使用默认的浏览器打开 browser_path='' chose_a_browser_open_url(chose_a_browser_open_url,url) else: browser_task_name=browser_path.split('\\')[-1]#结束任务的名字 browser_name=browser_task_name.split('.')[0]#自定义的浏览器代号 print (browser_name) web.register(browser_name, None,web.BackgroundBrowser(browser_path)) web.get(browser_name).open_new_tab(url)#使用新注册的浏览器打开网 print ('using %s browser open url successful' % browser_name) time.sleep(5)#等待打开浏览器 # kill_cmd='taskkill /f /IM '+browser_task_name#拼接结束浏览器进程的命令 # os.system(kill_cmd) #终结浏览器 browser_path=random.choice(browser_paths)#随机从浏览器选择一个路径 chose_a_browser_open_url(browser_path,url) if __name__ == '__main__': print (''''' ***************************************** ** Welcome to python of browser ** ** Created on 2019-04-28 ** ** @author: Louise_ZOU ** ***************************************** ''') open_url_use_random_browser()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值