commit
This commit is contained in:
73
backend/quick_test_proxy.py
Normal file
73
backend/quick_test_proxy.py
Normal file
@@ -0,0 +1,73 @@
|
||||
"""
|
||||
快速测试代理是否生效
|
||||
"""
|
||||
import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
|
||||
|
||||
async def quick_test():
|
||||
"""快速测试代理"""
|
||||
# 配置代理
|
||||
proxy = {
|
||||
"server": "http://210.51.27.194:50001",
|
||||
"username": "hb6su3",
|
||||
"password": "acv2ciow"
|
||||
}
|
||||
|
||||
print("\n" + "="*60)
|
||||
print(f"测试代理: {proxy['server']}")
|
||||
print("="*60)
|
||||
|
||||
playwright = await async_playwright().start()
|
||||
|
||||
# 启动浏览器(带代理)
|
||||
browser = await playwright.chromium.launch(
|
||||
headless=False,
|
||||
proxy=proxy
|
||||
)
|
||||
|
||||
context = await browser.new_context()
|
||||
page = await context.new_page()
|
||||
|
||||
# 监听所有请求,查看是否通过代理
|
||||
def on_request(request):
|
||||
print(f"\n[请求] {request.method} {request.url}")
|
||||
# 打印请求头中的代理信息
|
||||
headers = request.headers
|
||||
if 'proxy-authorization' in headers:
|
||||
print(f" [代理认证] 包含代理认证头")
|
||||
|
||||
page.on("request", on_request)
|
||||
|
||||
print("\n[步骤1] 访问IP查询网站...")
|
||||
try:
|
||||
await page.goto('https://httpbin.org/ip', timeout=30000)
|
||||
ip_info = await page.locator('body').inner_text()
|
||||
print(f"\n当前IP信息:\n{ip_info}")
|
||||
except Exception as e:
|
||||
print(f"访问失败: {e}")
|
||||
|
||||
print("\n[步骤2] 访问小红书创作者中心...")
|
||||
try:
|
||||
await page.goto('https://creator.xiaohongshu.com/login', timeout=60000)
|
||||
print(f"页面URL: {page.url}")
|
||||
|
||||
if 'captcha' in page.url:
|
||||
print("⚠️ 触发验证页面")
|
||||
else:
|
||||
print("✅ 正常访问登录页")
|
||||
|
||||
await asyncio.sleep(3)
|
||||
except Exception as e:
|
||||
print(f"访问失败: {e}")
|
||||
|
||||
await browser.close()
|
||||
await playwright.stop()
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("测试完成")
|
||||
print("="*60)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(quick_test())
|
||||
156
backend/test_proxy_connection.py
Normal file
156
backend/test_proxy_connection.py
Normal file
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
测试代理IP连接
|
||||
使用requests验证代理是否可用
|
||||
"""
|
||||
|
||||
import requests
|
||||
from damai_proxy_config import get_all_enabled_proxies
|
||||
import time
|
||||
|
||||
|
||||
def test_proxy_with_requests(proxy_config: dict, test_url: str = "http://httpbin.org/ip"):
|
||||
"""
|
||||
使用requests测试代理连接
|
||||
|
||||
Args:
|
||||
proxy_config: 代理配置
|
||||
test_url: 测试URL
|
||||
"""
|
||||
print(f"\n{'='*60}")
|
||||
print(f"🔄 测试代理: {proxy_config['name']}")
|
||||
print(f" 服务器: {proxy_config['server']}")
|
||||
print(f" 用户名: {proxy_config['username']}")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
# 格式化代理URL
|
||||
server = proxy_config['server'].replace('http://', '').replace('https://', '')
|
||||
username = proxy_config['username']
|
||||
password = proxy_config['password']
|
||||
proxy_url = f"http://{username}:{password}@{server}"
|
||||
|
||||
proxies = {
|
||||
"http": proxy_url,
|
||||
"https": proxy_url
|
||||
}
|
||||
|
||||
print(f"📍 代理URL: {proxy_url}")
|
||||
|
||||
# 测试HTTP
|
||||
print(f"\n✅ 测试HTTP...")
|
||||
try:
|
||||
start_time = time.time()
|
||||
response = requests.get("http://httpbin.org/ip", proxies=proxies, timeout=10)
|
||||
elapsed_time = time.time() - start_time
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f" ✅ HTTP连接成功 - 响应时间: {elapsed_time:.2f}秒")
|
||||
try:
|
||||
result = response.json()
|
||||
print(f" 🌍 出IP: {result.get('origin', 'N/A')}")
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
print(f" ❌ HTTP失败 - 状态码: {response.status_code}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f" ❌ HTTP错误: {str(e)}")
|
||||
return False
|
||||
|
||||
# 测试HTTPS
|
||||
print(f"\n🔒 测试HTTPS...")
|
||||
try:
|
||||
start_time = time.time()
|
||||
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
|
||||
elapsed_time = time.time() - start_time
|
||||
|
||||
if response.status_code == 200:
|
||||
print(f" ✅ HTTPS连接成功 - 响应时间: {elapsed_time:.2f}秒")
|
||||
try:
|
||||
result = response.json()
|
||||
print(f" 🌍 出IP: {result.get('origin', 'N/A')}")
|
||||
except:
|
||||
pass
|
||||
return True
|
||||
else:
|
||||
print(f" ❌ HTTPS失败 - 状态码: {response.status_code}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f" ❌ HTTPS错误: {str(e)}")
|
||||
print(f" ⚠️ 该代理可能不支持HTTPS隧道(CONNECT方法)")
|
||||
return False
|
||||
|
||||
|
||||
def test_all_proxies():
|
||||
"""测试所有代理"""
|
||||
proxies = get_all_enabled_proxies()
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print(f" 代理连接测试")
|
||||
print(f" 共有 {len(proxies)} 个代理需要测试")
|
||||
print(f"{'='*60}")
|
||||
|
||||
results = []
|
||||
|
||||
for i, proxy_config in enumerate(proxies, 1):
|
||||
print(f"\n[{i}/{len(proxies)}]")
|
||||
success = test_proxy_with_requests(proxy_config)
|
||||
results.append({
|
||||
'name': proxy_config['name'],
|
||||
'server': proxy_config['server'],
|
||||
'success': success
|
||||
})
|
||||
|
||||
if i < len(proxies):
|
||||
print("\n⏳ 等待2秒...")
|
||||
time.sleep(2)
|
||||
|
||||
# 输出汇总
|
||||
print(f"\n\n{'='*60}")
|
||||
print(" 测试汇总")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
success_count = sum(1 for r in results if r['success'])
|
||||
fail_count = len(results) - success_count
|
||||
|
||||
print(f"✅ 成功: {success_count}/{len(results)}")
|
||||
print(f"❌ 失败: {fail_count}/{len(results)}")
|
||||
print(f"\n详细结果:")
|
||||
|
||||
for result in results:
|
||||
status = "✅ 可用" if result['success'] else "❌ 不可用"
|
||||
print(f" {status} - {result['name']} ({result['server']})")
|
||||
|
||||
return results
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("\n" + "="*60)
|
||||
print(" 小红书代理IP连接测试")
|
||||
print(" 使用requests库测试代理连通性")
|
||||
print("="*60)
|
||||
|
||||
results = test_all_proxies()
|
||||
|
||||
# 给出建议
|
||||
available_proxies = [r for r in results if r['success']]
|
||||
|
||||
if available_proxies:
|
||||
print(f"\n\n💡 建议:")
|
||||
print(f" 以下代理可用,可以在damai_proxy_config.py中保留:")
|
||||
for proxy in available_proxies:
|
||||
print(f" ✅ {proxy['name']}")
|
||||
|
||||
unavailable_proxies = [r for r in results if not r['success']]
|
||||
if unavailable_proxies:
|
||||
print(f"\n 以下代理不可用,建议在damai_proxy_config.py中设置enabled=False:")
|
||||
for proxy in unavailable_proxies:
|
||||
print(f" ❌ {proxy['name']}")
|
||||
else:
|
||||
print(f"\n\n⚠️ 警告: 所有代理均不可用!")
|
||||
print(f" 请检查:")
|
||||
print(f" 1. 代理服务器是否在线")
|
||||
print(f" 2. 用户名和密码是否正确")
|
||||
print(f" 3. 本机网络是否正常")
|
||||
106
backend/test_proxy_playwright.py
Normal file
106
backend/test_proxy_playwright.py
Normal file
@@ -0,0 +1,106 @@
|
||||
"""
|
||||
测试Playwright使用代理访问HTTP和HTTPS网站
|
||||
"""
|
||||
import asyncio
|
||||
import warnings
|
||||
import sys
|
||||
from playwright.async_api import async_playwright
|
||||
from damai_proxy_config import get_proxy_1, format_proxy_for_playwright
|
||||
|
||||
# 抑制Windows下asyncio的资源警告
|
||||
warnings.filterwarnings('ignore', category=ResourceWarning)
|
||||
|
||||
async def test_proxy_with_playwright():
|
||||
"""使用Playwright测试代理"""
|
||||
|
||||
# 获取代理配置
|
||||
proxy_config = get_proxy_1()
|
||||
proxy = format_proxy_for_playwright(proxy_config)
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("Playwright代理测试")
|
||||
print("="*60)
|
||||
print(f"\n代理配置:")
|
||||
print(f" 服务器: {proxy['server']}")
|
||||
print(f" 用户名: {proxy['username']}")
|
||||
|
||||
playwright = None
|
||||
browser = None
|
||||
|
||||
try:
|
||||
playwright = await async_playwright().start()
|
||||
|
||||
print(f"\n启动浏览器...")
|
||||
browser = await playwright.chromium.launch(
|
||||
headless=True,
|
||||
proxy=proxy
|
||||
)
|
||||
|
||||
print(f"浏览器启动成功\n")
|
||||
|
||||
context = await browser.new_context()
|
||||
page = await context.new_page()
|
||||
|
||||
# 测试1: HTTP网站
|
||||
print("-"*60)
|
||||
print("测试1: 访问HTTP网站 (http://httpbin.org/ip)")
|
||||
print("-"*60)
|
||||
try:
|
||||
response = await page.goto("http://httpbin.org/ip", timeout=15000, wait_until="domcontentloaded")
|
||||
print(f"成功 - 状态码: {response.status}")
|
||||
content = await page.content()
|
||||
if 'origin' in content:
|
||||
print("页面包含IP信息\n")
|
||||
except Exception as e:
|
||||
print(f"失败: {str(e)}\n")
|
||||
|
||||
# 测试2: HTTPS网站
|
||||
print("-"*60)
|
||||
print("测试2: 访问HTTPS网站 (https://httpbin.org/ip)")
|
||||
print("-"*60)
|
||||
try:
|
||||
response = await page.goto("https://httpbin.org/ip", timeout=15000, wait_until="domcontentloaded")
|
||||
print(f"成功 - 状态码: {response.status}\n")
|
||||
except Exception as e:
|
||||
print(f"失败: {str(e)}\n")
|
||||
|
||||
# 测试3: 小红书HTTP
|
||||
print("-"*60)
|
||||
print("测试3: 访问小红书HTTP (http://xiaohongshu.com)")
|
||||
print("-"*60)
|
||||
try:
|
||||
response = await page.goto("http://xiaohongshu.com", timeout=15000, wait_until="domcontentloaded")
|
||||
print(f"成功 - 状态码: {response.status}")
|
||||
print(f"最终URL: {page.url}\n")
|
||||
except Exception as e:
|
||||
print(f"失败: {str(e)}\n")
|
||||
|
||||
# 测试4: 小红书HTTPS
|
||||
print("-"*60)
|
||||
print("测试4: 访问小红书HTTPS (https://xiaohongshu.com)")
|
||||
print("-"*60)
|
||||
try:
|
||||
response = await page.goto("https://xiaohongshu.com", timeout=15000, wait_until="domcontentloaded")
|
||||
print(f"成功 - 状态码: {response.status}\n")
|
||||
except Exception as e:
|
||||
print(f"失败: {str(e)}\n")
|
||||
|
||||
await context.close()
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n测试过程出错: {str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
if browser:
|
||||
await browser.close()
|
||||
if playwright:
|
||||
await playwright.stop()
|
||||
|
||||
print("="*60)
|
||||
print("测试完成")
|
||||
print("="*60 + "\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(test_proxy_with_playwright())
|
||||
172
backend/test_proxy_verification.py
Normal file
172
backend/test_proxy_verification.py
Normal file
@@ -0,0 +1,172 @@
|
||||
"""
|
||||
测试代理是否生效
|
||||
验证Playwright是否真的通过代理IP访问网站
|
||||
"""
|
||||
import asyncio
|
||||
import sys
|
||||
from playwright.async_api import async_playwright
|
||||
from damai_proxy_config import get_random_proxy, format_proxy_for_playwright
|
||||
|
||||
|
||||
async def test_proxy():
|
||||
"""测试代理IP是否生效"""
|
||||
print("=" * 60, file=sys.stderr)
|
||||
print("开始测试代理IP是否生效", file=sys.stderr)
|
||||
print("=" * 60, file=sys.stderr)
|
||||
|
||||
# 1. 获取本机真实IP(不使用代理)
|
||||
print("\n[步骤1] 获取本机真实IP(不使用代理)", file=sys.stderr)
|
||||
playwright = await async_playwright().start()
|
||||
browser = await playwright.chromium.launch(headless=False)
|
||||
context = await browser.new_context()
|
||||
page = await context.new_page()
|
||||
|
||||
# 访问IP查询网站
|
||||
await page.goto('https://httpbin.org/ip', timeout=30000)
|
||||
real_ip_text = await page.locator('body').inner_text()
|
||||
print(f"本机IP信息:\n{real_ip_text}", file=sys.stderr)
|
||||
|
||||
await browser.close()
|
||||
await playwright.stop()
|
||||
|
||||
# 2. 使用代理IP访问
|
||||
print("\n[步骤2] 使用代理IP访问", file=sys.stderr)
|
||||
|
||||
# 获取随机代理
|
||||
proxy_config = get_random_proxy()
|
||||
proxy = format_proxy_for_playwright(proxy_config)
|
||||
print(f"使用代理: {proxy_config.get('name', '未知')} - {proxy['server']}", file=sys.stderr)
|
||||
|
||||
playwright = await async_playwright().start()
|
||||
|
||||
# 启动浏览器时配置代理
|
||||
launch_kwargs = {
|
||||
"headless": False,
|
||||
"proxy": proxy,
|
||||
"args": [
|
||||
'--disable-blink-features=AutomationControlled',
|
||||
]
|
||||
}
|
||||
|
||||
browser = await playwright.chromium.launch(**launch_kwargs)
|
||||
context = await browser.new_context()
|
||||
|
||||
# 注入反检测脚本
|
||||
await context.add_init_script("""
|
||||
Object.defineProperty(navigator, 'webdriver', {
|
||||
get: () => undefined
|
||||
});
|
||||
""")
|
||||
|
||||
page = await context.new_page()
|
||||
|
||||
# 访问IP查询网站
|
||||
print("正在访问 httpbin.org/ip ...", file=sys.stderr)
|
||||
await page.goto('https://httpbin.org/ip', timeout=30000)
|
||||
proxy_ip_text = await page.locator('body').inner_text()
|
||||
print(f"代理IP信息:\n{proxy_ip_text}", file=sys.stderr)
|
||||
|
||||
# 3. 访问多个IP查询网站进行交叉验证
|
||||
print("\n[步骤3] 交叉验证 - 访问其他IP查询网站", file=sys.stderr)
|
||||
|
||||
test_urls = [
|
||||
'https://api.ipify.org?format=json',
|
||||
'https://ifconfig.me/all.json',
|
||||
]
|
||||
|
||||
for url in test_urls:
|
||||
try:
|
||||
print(f"\n访问: {url}", file=sys.stderr)
|
||||
await page.goto(url, timeout=30000)
|
||||
content = await page.locator('body').inner_text()
|
||||
print(f"返回内容:\n{content}", file=sys.stderr)
|
||||
except Exception as e:
|
||||
print(f"访问失败: {str(e)}", file=sys.stderr)
|
||||
|
||||
# 4. 测试访问小红书
|
||||
print("\n[步骤4] 测试访问小红书创作者中心", file=sys.stderr)
|
||||
try:
|
||||
await page.goto('https://creator.xiaohongshu.com/login', timeout=60000)
|
||||
print(f"小红书页面URL: {page.url}", file=sys.stderr)
|
||||
print(f"页面标题: {await page.title()}", file=sys.stderr)
|
||||
|
||||
# 检查是否被重定向到验证页面
|
||||
if 'captcha' in page.url:
|
||||
print("⚠️ 警告: 页面被重定向到验证页面,代理IP可能已被标记", file=sys.stderr)
|
||||
else:
|
||||
print("✅ 成功访问小红书登录页", file=sys.stderr)
|
||||
|
||||
# 等待5秒观察页面
|
||||
print("\n等待5秒,您可以观察浏览器窗口...", file=sys.stderr)
|
||||
await asyncio.sleep(5)
|
||||
|
||||
except Exception as e:
|
||||
print(f"访问小红书失败: {str(e)}", file=sys.stderr)
|
||||
|
||||
await browser.close()
|
||||
await playwright.stop()
|
||||
|
||||
print("\n" + "=" * 60, file=sys.stderr)
|
||||
print("测试完成", file=sys.stderr)
|
||||
print("=" * 60, file=sys.stderr)
|
||||
print("\n对比上述IP信息:", file=sys.stderr)
|
||||
print("- 如果本机IP和代理IP不同,说明代理生效", file=sys.stderr)
|
||||
print("- 如果IP相同,说明代理未生效", file=sys.stderr)
|
||||
|
||||
|
||||
async def test_all_proxies():
|
||||
"""测试所有启用的代理"""
|
||||
from damai_proxy_config import get_all_enabled_proxies
|
||||
|
||||
enabled_proxies = get_all_enabled_proxies()
|
||||
print(f"\n找到 {len(enabled_proxies)} 个已启用的代理", file=sys.stderr)
|
||||
|
||||
for i, proxy_config in enumerate(enabled_proxies, 1):
|
||||
print(f"\n{'=' * 60}", file=sys.stderr)
|
||||
print(f"测试代理 {i}/{len(enabled_proxies)}: {proxy_config.get('name', '未知')}", file=sys.stderr)
|
||||
print(f"{'=' * 60}", file=sys.stderr)
|
||||
|
||||
try:
|
||||
proxy = format_proxy_for_playwright(proxy_config)
|
||||
|
||||
playwright = await async_playwright().start()
|
||||
browser = await playwright.chromium.launch(
|
||||
headless=True,
|
||||
proxy=proxy,
|
||||
args=['--disable-blink-features=AutomationControlled']
|
||||
)
|
||||
context = await browser.new_context()
|
||||
page = await context.new_page()
|
||||
|
||||
# 访问IP查询网站
|
||||
await page.goto('https://httpbin.org/ip', timeout=30000)
|
||||
ip_text = await page.locator('body').inner_text()
|
||||
print(f"代理IP: {ip_text}", file=sys.stderr)
|
||||
|
||||
# 测试访问小红书
|
||||
await page.goto('https://creator.xiaohongshu.com/login', timeout=60000)
|
||||
|
||||
if 'captcha' in page.url:
|
||||
print(f"❌ {proxy_config['name']} - 触发验证页面", file=sys.stderr)
|
||||
else:
|
||||
print(f"✅ {proxy_config['name']} - 可正常访问", file=sys.stderr)
|
||||
|
||||
await browser.close()
|
||||
await playwright.stop()
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ {proxy_config['name']} - 测试失败: {str(e)}", file=sys.stderr)
|
||||
|
||||
# 间隔2秒
|
||||
await asyncio.sleep(2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "all":
|
||||
# 测试所有代理
|
||||
asyncio.run(test_all_proxies())
|
||||
else:
|
||||
# 测试单个随机代理(详细模式)
|
||||
asyncio.run(test_proxy())
|
||||
143
backend/test_xhs_proxy.py
Normal file
143
backend/test_xhs_proxy.py
Normal file
@@ -0,0 +1,143 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
测试小红书代理配置
|
||||
验证代理IP是否可用
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
from xhs_login import XHSLoginService
|
||||
from damai_proxy_config import get_all_enabled_proxies, format_proxy_for_playwright
|
||||
|
||||
|
||||
async def test_proxy_access():
|
||||
"""测试代理访问小红书"""
|
||||
proxies = get_all_enabled_proxies()
|
||||
|
||||
print(f"\n📋 共有 {len(proxies)} 个可用代理\n")
|
||||
|
||||
for i, proxy_config in enumerate(proxies):
|
||||
print(f"\n{'='*60}")
|
||||
print(f"🔄 测试代理 {i+1}/{len(proxies)}: {proxy_config['name']}")
|
||||
print(f" 服务器: {proxy_config['server']}")
|
||||
print(f" 用户名: {proxy_config['username']}")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
try:
|
||||
# 格式化代理配置
|
||||
proxy_dict = format_proxy_for_playwright(proxy_config)
|
||||
print(f"🌐 代理配置: {proxy_dict}\n")
|
||||
|
||||
# 创建登录服务实例,使用指定代理
|
||||
login_service = XHSLoginService(
|
||||
use_pool=False, # 测试时不使用浏览器池
|
||||
headless=False, # 有头模式方便观察
|
||||
)
|
||||
|
||||
# 初始化浏览器,传入代理
|
||||
print("🚀 正在启动浏览器...")
|
||||
await login_service.init_browser(
|
||||
proxy=proxy_dict, # 使用代理字典
|
||||
use_random_proxy=False # 禁用自动代理,使用我们指定的
|
||||
)
|
||||
|
||||
print("✅ 浏览器启动成功\n")
|
||||
|
||||
# 访问小红书首页
|
||||
print("🌍 正在访问小红书首页...")
|
||||
await login_service.page.goto('https://www.xiaohongshu.com', timeout=30000)
|
||||
|
||||
# 检查当前URL
|
||||
current_url = login_service.page.url
|
||||
print(f"📍 当前URL: {current_url}\n")
|
||||
|
||||
# 判断是否被风控
|
||||
if '/website-login/captcha' in current_url or 'verifyUuid=' in current_url:
|
||||
print("❌ 该代理被风控,需要验证\n")
|
||||
else:
|
||||
print("✅ 代理正常,成功访问小红书\n")
|
||||
|
||||
# 等待5秒观察页面
|
||||
print("⏳ 等待5秒观察页面...")
|
||||
await asyncio.sleep(5)
|
||||
|
||||
# 关闭浏览器
|
||||
await login_service.close()
|
||||
print("✅ 浏览器已关闭\n")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 测试失败: {str(e)}\n")
|
||||
try:
|
||||
await login_service.close()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
async def test_random_proxy():
|
||||
"""测试随机代理"""
|
||||
print(f"\n{'='*60}")
|
||||
print("🎲 测试随机代理功能")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
try:
|
||||
# 创建登录服务实例
|
||||
login_service = XHSLoginService(
|
||||
use_pool=False,
|
||||
headless=False,
|
||||
)
|
||||
|
||||
# 初始化浏览器,自动选择随机代理
|
||||
print("🚀 正在启动浏览器(自动选择随机代理)...")
|
||||
await login_service.init_browser(use_random_proxy=True)
|
||||
|
||||
print("✅ 浏览器启动成功\n")
|
||||
|
||||
# 访问小红书首页
|
||||
print("🌍 正在访问小红书首页...")
|
||||
await login_service.page.goto('https://www.xiaohongshu.com', timeout=30000)
|
||||
|
||||
# 检查当前URL
|
||||
current_url = login_service.page.url
|
||||
print(f"📍 当前URL: {current_url}\n")
|
||||
|
||||
# 判断是否被风控
|
||||
if '/website-login/captcha' in current_url or 'verifyUuid=' in current_url:
|
||||
print("❌ 该代理被风控,需要验证\n")
|
||||
else:
|
||||
print("✅ 代理正常,成功访问小红书\n")
|
||||
|
||||
# 等待10秒观察页面
|
||||
print("⏳ 等待10秒观察页面...")
|
||||
await asyncio.sleep(10)
|
||||
|
||||
# 关闭浏览器
|
||||
await login_service.close()
|
||||
print("✅ 浏览器已关闭\n")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 测试失败: {str(e)}\n")
|
||||
try:
|
||||
await login_service.close()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("\n" + "="*60)
|
||||
print(" 小红书代理配置测试")
|
||||
print("="*60)
|
||||
|
||||
# 选择测试模式
|
||||
print("\n请选择测试模式:")
|
||||
print("1. 测试所有代理")
|
||||
print("2. 测试随机代理功能")
|
||||
|
||||
choice = input("\n请输入选项(1 or 2): ").strip()
|
||||
|
||||
if choice == '1':
|
||||
asyncio.run(test_proxy_access())
|
||||
elif choice == '2':
|
||||
asyncio.run(test_random_proxy())
|
||||
else:
|
||||
print("无效选项")
|
||||
Reference in New Issue
Block a user