如何绕过Yaklass网站设备检查以获取账号页面HTML代码
绕过Yaklass网站设备检查的方法
我用Python脚本登录Yaklass网站并获取账号页面HTML时,被网站的“设备检查”机制拦截,返回了设备验证页面,无法正常获取目标内容。
我的脚本代码
import fake_useragent import requests import os from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv()) session = requests.Session() login_link = 'https://go.yaklass.ru/auth/password' user = fake_useragent.UserAgent().random header = { 'user-agent': user } data = { 'UserName': os.getenv('UserName'), 'Password': os.getenv('Password') } responce = session.post(login_link, data=data, headers=header) profile_link = 'https://www.yaklass.ru/Account/Profile' soup = session.get(profile_link, headers=header) print(soup.text)
返回的设备验证页面内容
<!DOCTYPE html> <html lang="ru"> <head> <title>Checking your device</title> <link href="/favicon.ico" rel="shortcut icon"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="//b1a3b3f5-7394-48e5-9587-e5e03db7b89f.selcdn.net/mixed_opensans_400_400i_600_roboto_400_300_cyrilic_latin_v1.css" rel="stylesheet" type="text/css" media="screen and (min-width: 768px)"/> <link href="//b1a3b3f5-7394-48e5-9587-e5e03db7b89f.selcdn.net/robotocondensed/v16_cyrilic/font_v1.css" rel="stylesheet" type="text/css" media="screen and (max-width: 767px)"/> </head> <body> <h3>Checking your device</h3> <form id="captchaForm" action="/Account/DoSolveCaptcha1" method="post"> <input type="hidden" name="r" id="r"/> <input type="hidden" name="b" id="b"/> <input type="hidden" name="s" id="s"/> <input type="hidden" name="tn" id="tn"/> <p id="msg"> Please wait. In a few seconds the page will be loaded... </p> <p id="startPage" class="hide"> <a href="/">To the main page</a> </p> </form> </body> </html>
可行的绕过方法
用浏览器自动化工具模拟真实访问
网站的设备检查大概率会验证JS执行能力,单纯的requests库无法处理这类验证。推荐用playwright或selenium模拟完整浏览器环境:from playwright.sync_api import sync_playwright import os from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv()) with sync_playwright() as p: # 先开可视化模式调试,稳定后可改为headless=True browser = p.chromium.launch(headless=False) page = browser.new_page() # 打开登录页 page.goto("https://go.yaklass.ru/auth/password") # 填写账号密码 page.fill('input[name="UserName"]', os.getenv('UserName')) page.fill('input[name="Password"]', os.getenv('Password')) # 点击登录按钮(需根据页面实际元素调整选择器) page.click('button[type="submit"]') # 跳转至个人页面并获取内容 page.goto("https://www.yaklass.ru/Account/Profile") print(page.content()) browser.close()补充完整的请求头信息
仅设置User-Agent不够,添加真实浏览器会发送的请求头,降低被识别为脚本的概率:user = fake_useragent.UserAgent().random header = { 'user-agent': user, 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': 'https://go.yaklass.ru/', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' }处理验证表单参数
从返回的验证页面看,表单包含r、b、s、tn等隐藏参数,这些是网站生成的验证标识。可以先请求登录页,等待页面JS生成这些参数后,再提交登录请求或验证表单。不过这种方法稳定性差,参数生成逻辑可能随时变更。更换代理IP
如果你的IP被网站标记为异常,尝试更换代理IP,避免被识别为自动化访问。
内容的提问来源于stack exchange,提问作者mixs
相关产品推荐
相关产品推荐

