208 lines
6.5 KiB
Python
208 lines
6.5 KiB
Python
|
|
"""
|
|||
|
|
大麦固定代理IP测试脚本
|
|||
|
|
测试两个固定代理IP在无头浏览器中的可用性
|
|||
|
|
"""
|
|||
|
|
import asyncio
|
|||
|
|
import sys
|
|||
|
|
from playwright.async_api import async_playwright
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 大麦固定代理IP配置
|
|||
|
|
DAMAI_PROXIES = [
|
|||
|
|
{
|
|||
|
|
"name": "大麦代理1",
|
|||
|
|
"server": "http://36.137.177.131:50001",
|
|||
|
|
"username": "qqwvy0",
|
|||
|
|
"password": "mun3r7xz"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "大麦代理2",
|
|||
|
|
"server": "http://111.132.40.72:50002",
|
|||
|
|
"username": "ih3z07",
|
|||
|
|
"password": "078bt7o5"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def test_proxy(proxy_config: dict):
|
|||
|
|
"""
|
|||
|
|
测试单个代理IP
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
proxy_config: 代理配置字典
|
|||
|
|
"""
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print(f"🔍 开始测试: {proxy_config['name']}")
|
|||
|
|
print(f" 代理服务器: {proxy_config['server']}")
|
|||
|
|
print(f" 认证信息: {proxy_config['username']} / {proxy_config['password']}")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
|
|||
|
|
playwright = None
|
|||
|
|
browser = None
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
# 启动Playwright
|
|||
|
|
playwright = await async_playwright().start()
|
|||
|
|
print("✅ Playwright启动成功")
|
|||
|
|
|
|||
|
|
# 配置代理
|
|||
|
|
proxy_settings = {
|
|||
|
|
"server": proxy_config["server"],
|
|||
|
|
"username": proxy_config["username"],
|
|||
|
|
"password": proxy_config["password"]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 启动浏览器(带代理)
|
|||
|
|
print(f"🚀 正在启动浏览器(使用代理: {proxy_config['server']})...")
|
|||
|
|
browser = await playwright.chromium.launch(
|
|||
|
|
headless=True,
|
|||
|
|
proxy=proxy_settings,
|
|||
|
|
args=[
|
|||
|
|
'--disable-blink-features=AutomationControlled',
|
|||
|
|
'--no-sandbox',
|
|||
|
|
'--disable-setuid-sandbox',
|
|||
|
|
'--disable-dev-shm-usage',
|
|||
|
|
'--disable-web-security',
|
|||
|
|
'--disable-features=IsolateOrigins,site-per-process',
|
|||
|
|
]
|
|||
|
|
)
|
|||
|
|
print("✅ 浏览器启动成功")
|
|||
|
|
|
|||
|
|
# 创建上下文
|
|||
|
|
context = await browser.new_context(
|
|||
|
|
viewport={'width': 1280, 'height': 720},
|
|||
|
|
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
|
|||
|
|
)
|
|||
|
|
print("✅ 浏览器上下文创建成功")
|
|||
|
|
|
|||
|
|
# 创建页面
|
|||
|
|
page = await context.new_page()
|
|||
|
|
print("✅ 页面创建成功")
|
|||
|
|
|
|||
|
|
# 测试1: 访问IP检测网站(检查代理IP是否生效)
|
|||
|
|
print("\n📍 测试1: 访问IP检测网站...")
|
|||
|
|
try:
|
|||
|
|
await page.goto("http://httpbin.org/ip", timeout=30000)
|
|||
|
|
await asyncio.sleep(2)
|
|||
|
|
|
|||
|
|
# 获取页面内容
|
|||
|
|
content = await page.content()
|
|||
|
|
print("✅ 访问成功,页面内容:")
|
|||
|
|
print(content[:500]) # 只显示前500字符
|
|||
|
|
|
|||
|
|
# 尝试提取IP信息
|
|||
|
|
ip_info = await page.evaluate("() => document.body.innerText")
|
|||
|
|
print(f"\n🌐 当前IP信息:\n{ip_info}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ 测试1失败: {str(e)}")
|
|||
|
|
|
|||
|
|
# 测试2: 访问小红书登录页(检查代理在实际场景中是否可用)
|
|||
|
|
print("\n📍 测试2: 访问小红书登录页...")
|
|||
|
|
try:
|
|||
|
|
await page.goto("https://creator.xiaohongshu.com/login", timeout=30000)
|
|||
|
|
await asyncio.sleep(3)
|
|||
|
|
|
|||
|
|
title = await page.title()
|
|||
|
|
url = page.url
|
|||
|
|
print(f"✅ 访问成功")
|
|||
|
|
print(f" 页面标题: {title}")
|
|||
|
|
print(f" 当前URL: {url}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ 测试2失败: {str(e)}")
|
|||
|
|
|
|||
|
|
# 测试3: 访问大麦网(测试目标网站)
|
|||
|
|
print("\n📍 测试3: 访问大麦网...")
|
|||
|
|
try:
|
|||
|
|
await page.goto("https://www.damai.cn/", timeout=30000)
|
|||
|
|
await asyncio.sleep(3)
|
|||
|
|
|
|||
|
|
title = await page.title()
|
|||
|
|
url = page.url
|
|||
|
|
print(f"✅ 访问成功")
|
|||
|
|
print(f" 页面标题: {title}")
|
|||
|
|
print(f" 当前URL: {url}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"❌ 测试3失败: {str(e)}")
|
|||
|
|
|
|||
|
|
print(f"\n✅ {proxy_config['name']} 测试完成")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"\n❌ {proxy_config['name']} 测试失败: {str(e)}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
|
|||
|
|
finally:
|
|||
|
|
# 清理资源
|
|||
|
|
try:
|
|||
|
|
if browser:
|
|||
|
|
await browser.close()
|
|||
|
|
print("🧹 浏览器已关闭")
|
|||
|
|
if playwright:
|
|||
|
|
await playwright.stop()
|
|||
|
|
print("🧹 Playwright已停止")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"⚠️ 清理资源时出错: {str(e)}")
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def test_all_proxies():
|
|||
|
|
"""测试所有代理IP"""
|
|||
|
|
print("\n" + "="*60)
|
|||
|
|
print("🎯 大麦固定代理IP测试")
|
|||
|
|
print("="*60)
|
|||
|
|
print(f"📊 共配置 {len(DAMAI_PROXIES)} 个代理IP")
|
|||
|
|
|
|||
|
|
# 依次测试每个代理
|
|||
|
|
for i, proxy_config in enumerate(DAMAI_PROXIES, 1):
|
|||
|
|
print(f"\n\n{'#'*60}")
|
|||
|
|
print(f"# 测试进度: {i}/{len(DAMAI_PROXIES)}")
|
|||
|
|
print(f"{'#'*60}")
|
|||
|
|
|
|||
|
|
await test_proxy(proxy_config)
|
|||
|
|
|
|||
|
|
# 测试间隔
|
|||
|
|
if i < len(DAMAI_PROXIES):
|
|||
|
|
print(f"\n⏳ 等待5秒后测试下一个代理...")
|
|||
|
|
await asyncio.sleep(5)
|
|||
|
|
|
|||
|
|
print("\n" + "="*60)
|
|||
|
|
print("🎉 所有代理测试完成!")
|
|||
|
|
print("="*60)
|
|||
|
|
|
|||
|
|
|
|||
|
|
async def test_single_proxy(index: int = 0):
|
|||
|
|
"""
|
|||
|
|
测试单个代理IP
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
index: 代理索引(0或1)
|
|||
|
|
"""
|
|||
|
|
if index < 0 or index >= len(DAMAI_PROXIES):
|
|||
|
|
print(f"❌ 无效的代理索引: {index},请使用 0 或 1")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
await test_proxy(DAMAI_PROXIES[index])
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
# Windows环境下设置事件循环策略
|
|||
|
|
if sys.platform == 'win32':
|
|||
|
|
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
|
|||
|
|
|
|||
|
|
# 解析命令行参数
|
|||
|
|
if len(sys.argv) > 1:
|
|||
|
|
try:
|
|||
|
|
proxy_index = int(sys.argv[1])
|
|||
|
|
print(f"🎯 测试单个代理(索引: {proxy_index})")
|
|||
|
|
asyncio.run(test_single_proxy(proxy_index))
|
|||
|
|
except ValueError:
|
|||
|
|
print("❌ 参数错误,请使用: python test_damai_proxy.py [0|1]")
|
|||
|
|
print(" 0: 测试代理1")
|
|||
|
|
print(" 1: 测试代理2")
|
|||
|
|
print(" 不带参数: 测试所有代理")
|
|||
|
|
else:
|
|||
|
|
# 测试所有代理
|
|||
|
|
asyncio.run(test_all_proxies())
|