selenium自动化签名到谷歌云抛出网络错误

aiazj4mn  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(152)

我正在使用 selenium & selenium 线在我的项目。我写的流程登录谷歌云门户网站。
我进入我的谷歌云邮件,然后,按下继续在谷歌登录,然后它登录到gcp。
我得到了一些错误:
请求具有无效的身份验证凭据。需要OAuth 2访问令牌、登录Cookie或其他...
网络::错误代理连接失败

当我做同样的流程手动没有自动化,用同样的凭证,它工作得很好,没有任何网络错误。
我的Web驱动程序

from seleniumwire import webdriver
from seleniumwire.webdriver import ChromeOptions

def test_gcp_flow():

    options = ChromeOptions()
    options.add_experimental_option("detach", True)
    options.add_argument('--no-sandbox')
    options.add_argument('--single-process')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument("--start-maximized")
    options.add_argument('--auto-open-devtools-for-tabs')
    options.add_argument('--log-level=2')
    options.add_argument('--disable-features=IsolateOrigins,site-per-process')
    options.add_argument("--ignore_ssl")
    options.add_argument('--ignore-ssl-errors')
    options.add_argument('--ignore-certificate-errors')
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-setuid-sandbox")
    options.add_argument("--dns-prefetch-disable")
    options.add_argument('ignore-certificate-errors')
    options.add_argument('disable-web-security')
    options.add_argument('--allow-insecure-localhost')

    driver = webdriver.Chrome(options=options)
    driver.get('....any-hidden-url')
    # more flow actions - then it open gcp portal

我添加了openssl.cnf(如果没有这个openssl,它会显示TLS ssl问题),以便在使用Pycharm的测试中本地运行它:

openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Options = UnsafeLegacyRenegotiation

我尝试添加一些更改添加到Selenium驱动程序的chrome选项,但没有任何更改,仍然是相同的错误。

**我试着使用Firefox webdriver,它工作得很好,没有任何网络问题。**也许是任何铬缓存问题?因为几天前它工作我与铬。

我所期望的是,登录到gmail没有网络/令牌问题.

yh2wf1be

yh2wf1be1#

我能想到两个可能的选择:

  1. Google会检测到Selenium,并出于安全原因阻止使用它登录。Selenium Web驱动程序会向浏览器注入可识别的javascript,您可以使用一个简单的脚本来检测它。
    1.你的浏览器中有一个认证cookie,它没有在Selenium中使用。每个Selenium会话都是完全干净地启动的。你可以用pickle保存cookie,然后用Python将其注入Selenium web驱动程序。尽管如果你不能将其加密存储在安全的地方并在运行时获取它,我会避免使用它(否则--在某个时候,不管你认为你有多安全,它都会被偷)。
    顺便说一句,如果它的东西,你真的需要-你是一个付费客户,也许谷歌有一个可用的解决方案,为这种需要。
    祝你好运!
gjmwrych

gjmwrych2#

尝试使用 selenium 线与未检测到的铬驱动程序。
pip install selenium-wire
pip install undetected-chromedriver

from seleniumwire.undetected_chromedriver.v2 import Chrome, ChromeOptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait

if __name__ == "__main__":
    options = {}
    chrome_options = ChromeOptions()
    chrome_options.add_argument('--user-data-dir=hash')
    chrome_options.add_argument("--disable-gpu")
    chrome_options.add_argument("--incognito")
    chrome_options.add_argument("--disable-dev-shm-usage")
    browser = Chrome(seleniumwire_options=options, options=chrome_options)
    browser.get('your url')

    ... your rest of the code

我希望它能解决这个问题。

相关问题