You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.6 KiB
110 lines
3.6 KiB
#!/usr/bin/env python3
|
|
"""
|
|
使用Playwright查询快递信息
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
from datetime import datetime
|
|
|
|
# 添加虚拟环境路径
|
|
venv_path = '/root/.openclaw/venv/lib/python3.12/site-packages'
|
|
if venv_path not in sys.path:
|
|
sys.path.insert(0, venv_path)
|
|
|
|
try:
|
|
from playwright.sync_api import sync_playwright
|
|
PLAYWRIGHT_AVAILABLE = True
|
|
except ImportError:
|
|
PLAYWRIGHT_AVAILABLE = False
|
|
print("⚠️ Playwright未安装或未找到")
|
|
|
|
def query_express_with_playwright(tracking_number):
|
|
"""
|
|
使用Playwright查询快递信息
|
|
"""
|
|
if not PLAYWRIGHT_AVAILABLE:
|
|
return "❌ Playwright不可用"
|
|
|
|
print(f"🔍 使用Playwright查询快递: {tracking_number}")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
with sync_playwright() as p:
|
|
# 启动浏览器
|
|
print("🚀 启动浏览器...")
|
|
browser = p.chromium.launch(
|
|
headless=True,
|
|
args=['--no-sandbox', '--disable-setuid-sandbox']
|
|
)
|
|
|
|
# 创建页面
|
|
page = browser.new_page(
|
|
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
|
|
)
|
|
|
|
# 方法1: 尝试访问京东物流查询页面
|
|
print("🌐 访问京东物流查询页面...")
|
|
try:
|
|
page.goto('https://www.jd.com', timeout=30000)
|
|
print(f" ✅ 页面加载成功,标题: {page.title()}")
|
|
|
|
# 保存截图用于调试
|
|
page.screenshot(path='/tmp/jd_homepage.png')
|
|
print(f" 📸 截图已保存: /tmp/jd_homepage.png")
|
|
|
|
except Exception as e:
|
|
print(f" ❌ 访问失败: {e}")
|
|
|
|
# 方法2: 尝试快递100
|
|
print("\n🌐 尝试快递100...")
|
|
try:
|
|
page.goto(f'https://www.kuaidi100.com/?nu={tracking_number}', timeout=30000)
|
|
print(f" ✅ 页面加载成功,标题: {page.title()}")
|
|
|
|
# 保存截图
|
|
page.screenshot(path='/tmp/kuaidi100_page.png')
|
|
print(f" 📸 截图已保存: /tmp/kuaidi100_page.png")
|
|
|
|
# 尝试提取页面内容
|
|
content = page.content()
|
|
if "暂无" in content or "无信息" in content:
|
|
print(" ⚠️ 暂无物流信息")
|
|
elif "签收" in content:
|
|
print(" ✅ 已签收!")
|
|
elif "运输" in content:
|
|
print(" 🚚 运输中...")
|
|
|
|
except Exception as e:
|
|
print(f" ❌ 访问失败: {e}")
|
|
|
|
# 关闭浏览器
|
|
browser.close()
|
|
print("\n✅ 浏览器已关闭")
|
|
|
|
except Exception as e:
|
|
return f"❌ Playwright查询失败: {e}"
|
|
|
|
return "\n💡 查询完成!虽然无法直接获取物流数据,但浏览器功能正常工作!"
|
|
|
|
def main():
|
|
tracking_number = sys.argv[1] if len(sys.argv) > 1 else "JDX049504693863"
|
|
|
|
print("\n" + "=" * 60)
|
|
print("📦 Playwright快递查询工具")
|
|
print("=" * 60)
|
|
print(f"查询时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
print()
|
|
|
|
result = query_express_with_playwright(tracking_number)
|
|
print(result)
|
|
|
|
print("\n" + "=" * 60)
|
|
print("💡 推荐查询方式:")
|
|
print(" 1. 京东APP - 最准确")
|
|
print(" 2. 京东官网 - https://www.jd.com")
|
|
print(" 3. 快递100 - https://www.kuaidi100.com")
|
|
print("=" * 60)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|