Selenium登录prenotami.esteri.it跳转至Unavailable问题求助
问题核心
你遇到的Unavailable页面本质是网站反爬机制触发——尤其是reCAPTCHA验证未通过,不管用Selenium还是直接POST请求,都因为缺少有效的reCAPTCHA验证令牌被判定为机器人。
解决方案1:修复Selenium登录脚本(模拟真实用户+手动验证)
网站升级了反爬检测,原来的Selenium配置会被识别为自动化工具,同时reCAPTCHA未完成验证就提交导致失败。修改脚本如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager import time website = 'https://prenotami.esteri.it/' options = Options() # 核心:隐藏Selenium自动化标识,避免被检测 options.add_argument('--disable-blink-features=AutomationControlled') # 设置真实浏览器UA,模拟普通用户 options.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"') options.add_argument('--start-maximized') options.add_argument('--disable-dev-shm-usage') options.add_argument('--disable-gpu') driver = webdriver.Chrome(ChromeDriverManager().install(), options=options) driver.get(website) # 用显式等待替代固定sleep,更稳定 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'login-email'))).send_keys('USERNAME') time.sleep(2) WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'login-password'))).send_keys('PASSWORD') time.sleep(2) # 等待用户手动完成reCAPTCHA验证(自动破解难度极高,手动是最可靠的合规方案) input("请完成页面上的reCAPTCHA验证后按回车继续...") # 提交登录 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'button.primary.g-recaptcha'))).click() time.sleep(10)
关键说明:
--disable-blink-features=AutomationControlled是避免被网站检测为Selenium自动化的核心参数;- 手动完成reCAPTCHA是当前最可靠的方案,因为reCAPTCHA v2的自动破解服务存在合规风险,且网站可能随时升级验证逻辑。
解决方案2:修复Requests登录请求(补充必要参数)
直接POST请求失败的原因是缺少两个关键参数:__RequestVerificationToken(防CSRF令牌)和g-recaptcha-response(reCAPTCHA验证令牌)。修正代码如下:
import requests from bs4 import BeautifulSoup with requests.session() as session: # 先获取登录页面,拿到Cookie和防CSRF令牌 login_page_res = session.get('https://prenotami.esteri.it/') soup = BeautifulSoup(login_page_res.text, 'html.parser') csrf_token = soup.find('input', {'name': '__RequestVerificationToken'}).get('value') # ********** 这里需要获取有效的g-recaptcha-response令牌 ********** # 可以手动完成验证后从浏览器开发者工具中提取,或使用第三方破解服务 recaptcha_token = "替换为实际的g-recaptcha-response值" # 构造完整登录数据 login_data = { 'Email': 'USER', 'Password': 'PASSWORD', '__RequestVerificationToken': csrf_token, 'g-recaptcha-response': recaptcha_token } # 提交登录请求 login_res = session.post("https://prenotami.esteri.it/Home/Login", data=login_data) print(login_res.text)
关键说明:
- 没有
g-recaptcha-response令牌,服务器会直接返回Unavailable页面; - 若要自动化获取该令牌,需对接第三方reCAPTCHA破解服务,但需注意网站的使用条款,避免违规。
额外注意事项
- 避免频繁发送请求,防止IP被网站封禁;
- 保持ChromeDriver与Chrome浏览器版本一致,避免兼容性问题;
- 尽量用显式等待替代
time.sleep(),提升脚本稳定性。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

