230 lines
7.2 KiB
Python
230 lines
7.2 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
Chrome配置检查脚本
|
||
验证32位ChromeDriver是否能正常驱动64位Chrome
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
import platform
|
||
import subprocess
|
||
|
||
|
||
def check_system_info():
|
||
"""检查系统信息"""
|
||
print("🖥️ 系统信息检查")
|
||
print("=" * 40)
|
||
|
||
# 系统架构
|
||
system_arch = platform.architecture()[0]
|
||
machine = platform.machine()
|
||
print(f"系统架构: {system_arch}")
|
||
print(f"处理器: {machine}")
|
||
|
||
# 判断是否64位系统
|
||
is_64bit = system_arch == '64bit' or 'AMD64' in machine
|
||
print(f"64位系统: {'✅ 是' if is_64bit else '❌ 否'}")
|
||
|
||
return is_64bit
|
||
|
||
def check_chrome_installation():
|
||
"""检查Chrome安装情况"""
|
||
print("\n🌐 Chrome浏览器检查")
|
||
print("=" * 40)
|
||
|
||
# Chrome可能的安装路径
|
||
chrome_paths = [
|
||
r"C:\Program Files\Google\Chrome\Application\chrome.exe",
|
||
r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
|
||
r"C:\Users\{}\AppData\Local\Google\Chrome\Application\chrome.exe".format(os.getenv('USERNAME', ''))
|
||
]
|
||
|
||
chrome_found = False
|
||
chrome_path = None
|
||
chrome_is_64bit = False
|
||
|
||
for path in chrome_paths:
|
||
if os.path.exists(path):
|
||
chrome_found = True
|
||
chrome_path = path
|
||
# 如果Chrome在Program Files目录,通常是64位
|
||
chrome_is_64bit = "Program Files" in path and "(x86)" not in path
|
||
print(f"✅ 找到Chrome: {path}")
|
||
print(f"Chrome位数: {'64位' if chrome_is_64bit else '32位或未确定'}")
|
||
break
|
||
|
||
if not chrome_found:
|
||
print("❌ 未找到Chrome浏览器")
|
||
return False, None, False
|
||
|
||
# 尝试获取Chrome版本
|
||
try:
|
||
result = subprocess.run([chrome_path, '--version'],
|
||
capture_output=True, text=True, timeout=5)
|
||
if result.returncode == 0:
|
||
version = result.stdout.strip()
|
||
print(f"Chrome版本: {version}")
|
||
else:
|
||
print("⚠️ 无法获取Chrome版本")
|
||
except Exception as e:
|
||
print(f"⚠️ 获取版本失败: {e}")
|
||
|
||
return True, chrome_path, chrome_is_64bit
|
||
|
||
def check_chromedriver():
|
||
"""检查ChromeDriver"""
|
||
print("\n🚗 ChromeDriver检查")
|
||
print("=" * 40)
|
||
|
||
# 可能的ChromeDriver路径
|
||
driver_paths = [
|
||
"chromedriver.exe",
|
||
"downloads/chromedriver.exe",
|
||
"./chromedriver.exe"
|
||
]
|
||
|
||
driver_found = False
|
||
driver_path = None
|
||
|
||
for path in driver_paths:
|
||
if os.path.exists(path):
|
||
driver_found = True
|
||
driver_path = path
|
||
print(f"✅ 找到ChromeDriver: {path}")
|
||
break
|
||
|
||
if not driver_found:
|
||
print("❌ 未找到ChromeDriver")
|
||
return False, None
|
||
|
||
# 获取ChromeDriver版本和架构信息
|
||
try:
|
||
result = subprocess.run([driver_path, '--version'],
|
||
capture_output=True, text=True, timeout=5)
|
||
if result.returncode == 0:
|
||
version_info = result.stdout.strip()
|
||
print(f"ChromeDriver版本: {version_info}")
|
||
|
||
# ChromeDriver通常是32位的,这是正常的
|
||
print("📋 说明: ChromeDriver通常是32位程序,这是正常的")
|
||
else:
|
||
print("⚠️ 无法获取ChromeDriver版本")
|
||
except Exception as e:
|
||
print(f"⚠️ 获取版本失败: {e}")
|
||
|
||
return True, driver_path
|
||
|
||
def test_selenium_connection():
|
||
"""测试Selenium连接"""
|
||
print("\n🧪 Selenium连接测试")
|
||
print("=" * 40)
|
||
|
||
try:
|
||
from selenium import webdriver
|
||
from selenium.webdriver.chrome.service import Service
|
||
from selenium.webdriver.chrome.options import Options
|
||
|
||
print("✅ Selenium模块导入成功")
|
||
|
||
# 查找ChromeDriver
|
||
driver_paths = ["chromedriver.exe", "downloads/chromedriver.exe", "./chromedriver.exe"]
|
||
driver_path = None
|
||
|
||
for path in driver_paths:
|
||
if os.path.exists(path):
|
||
driver_path = path
|
||
break
|
||
|
||
if not driver_path:
|
||
print("❌ 未找到ChromeDriver,跳过连接测试")
|
||
return False
|
||
|
||
# 配置Chrome选项
|
||
chrome_options = Options()
|
||
chrome_options.add_argument('--headless') # 无头模式,不显示浏览器
|
||
chrome_options.add_argument('--no-sandbox')
|
||
chrome_options.add_argument('--disable-dev-shm-usage')
|
||
|
||
# 创建服务
|
||
service = Service(driver_path)
|
||
|
||
print("🚀 正在启动Chrome WebDriver...")
|
||
|
||
# 创建WebDriver
|
||
driver = webdriver.Chrome(service=service, options=chrome_options)
|
||
|
||
# 简单测试
|
||
driver.get("data:text/html,<html><body><h1>Test Page</h1></body></html>")
|
||
title = driver.title
|
||
|
||
# 获取浏览器信息
|
||
user_agent = driver.execute_script("return navigator.userAgent")
|
||
|
||
driver.quit()
|
||
|
||
print("✅ Chrome WebDriver连接成功!")
|
||
print(f"📄 测试页面标题: {title}")
|
||
print(f"🔍 浏览器信息: {user_agent}")
|
||
|
||
# 分析浏览器位数
|
||
if "WOW64" in user_agent or "Win64; x64" in user_agent:
|
||
print("🎯 确认: 运行的是64位Chrome浏览器")
|
||
else:
|
||
print("🎯 运行的Chrome浏览器位数: 32位或未确定")
|
||
|
||
return True
|
||
|
||
except ImportError:
|
||
print("❌ 未安装Selenium模块")
|
||
print("💡 安装命令: pip install selenium")
|
||
return False
|
||
except Exception as e:
|
||
print(f"❌ 连接测试失败: {e}")
|
||
return False
|
||
|
||
def main():
|
||
"""主函数"""
|
||
print("🔍 Chrome配置全面检查")
|
||
print("=" * 50)
|
||
|
||
# 系统信息检查
|
||
is_64bit_system = check_system_info()
|
||
|
||
# Chrome检查
|
||
chrome_found, chrome_path, chrome_is_64bit = check_chrome_installation()
|
||
|
||
# ChromeDriver检查
|
||
driver_found, driver_path = check_chromedriver()
|
||
|
||
# Selenium测试
|
||
selenium_ok = test_selenium_connection()
|
||
|
||
# 总结
|
||
print("\n📋 检查总结")
|
||
print("=" * 50)
|
||
print(f"64位系统: {'✅' if is_64bit_system else '❌'}")
|
||
print(f"Chrome浏览器: {'✅' if chrome_found else '❌'}")
|
||
print(f"ChromeDriver: {'✅' if driver_found else '❌'}")
|
||
print(f"Selenium测试: {'✅' if selenium_ok else '❌'}")
|
||
|
||
print("\n💡 重要说明:")
|
||
print("• 32位ChromeDriver可以完美驱动64位Chrome浏览器")
|
||
print("• 这是Google官方的标准设计,不存在兼容性问题")
|
||
print("• ChromeDriver通过网络协议与Chrome通信,位数无关")
|
||
|
||
if chrome_found and driver_found:
|
||
print("\n🎉 配置正常!可以开始使用Selenium了")
|
||
else:
|
||
print("\n⚠️ 需要安装缺失的组件")
|
||
|
||
if not chrome_found:
|
||
print("📥 下载Chrome: https://www.google.com/chrome/")
|
||
|
||
if not driver_found:
|
||
print("📥 下载ChromeDriver: https://chromedriver.chromium.org/downloads")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
print()
|
||
input("按Enter键退出...") |