You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium谷歌账号登录自动化测试遇空白白屏问题求助

解决Selenium自动化谷歌登录后空白屏问题

这种情况我做自动化测试时也碰到过,十有八九是谷歌的反自动化检测机制在搞事情——毕竟谷歌对非人类行为的识别越来越严格了。结合你提到的「2个月前正常、手动登录无异常」的情况,给你几个实用的排查和解决方向:

1. 启用无痕模式或复用真实用户会话

默认的Selenium浏览器会话是完全干净的,没有任何浏览历史、缓存或已登录状态,谷歌很容易把它判定为自动化程序。你可以试试两种方案:

  • 方案1:启动无痕模式
    给Chrome添加--incognito参数,模拟用户的无痕浏览场景:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument("--incognito")
    driver = webdriver.Chrome(options=chrome_options)
    
  • 方案2:复用日常登录的用户数据
    如果你的本地Chrome已经登录过目标谷歌账号,可以直接调用这个用户的数据目录,相当于复用手动登录的会话,能绕过大部分检测。注意替换成你自己的用户数据路径:

    chrome_options.add_argument(r"--user-data-dir=C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data")
    chrome_options.add_argument("--profile-directory=Default")
    

    ⚠️ 注意:使用这个方案时,必须确保本地Chrome浏览器没有在运行,否则会报错。

2. 添加反检测参数,伪装成真实浏览器

谷歌会通过浏览器的一些特征判断是否为自动化程序,比如navigator.webdriver标记、自动化扩展等。你可以添加以下参数来去除这些特征:

chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("--start-maximized")  # 模拟最大化窗口
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)

另外,还可以通过Chrome DevTools命令去掉navigator.webdriver的标识:

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        })
    """
})

3. 模拟人类操作速度,避免过快触发检测

自动化操作的速度远快于人类,这也是谷歌检测的关键点之一。不要直接用send_keys一次性输入完整的邮箱或密码,拆分输入并添加随机间隔:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random

# 输入邮箱(逐字符输入,间隔0.1-0.3秒)
email_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "identifierId")))
email = "your-google-email@gmail.com"
for char in email:
    email_input.send_keys(char)
    time.sleep(random.uniform(0.1, 0.3))

# 点击下一步后等待1-2秒,再操作密码框
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "identifierNext"))).click()
time.sleep(random.uniform(1, 2))

# 密码输入同理
password_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "Passwd")))
password = "your-password"
for char in password:
    password_input.send_keys(char)
    time.sleep(random.uniform(0.1, 0.3))

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "passwordNext"))).click()

4. 排查是否触发二次验证

虽然你手动登录没问题,但自动化登录时谷歌可能会触发隐性的二次验证(比如验证码、设备验证),导致页面空白。你可以检查是否有被拦截的弹窗,或者切换回原窗口查看是否有验证提示。不过这个可能性相对较低,可以作为最后排查项。

如果上面的方法都不行,还可以试试undetected-chromedriver这个第三方库——它专门针对谷歌的反自动化机制做了优化,用法和原生Selenium几乎一致,能绕过大部分检测。

内容的提问来源于stack exchange,提问作者Rafał Witulski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:44:28