我试图用Selenium登录谷歌,我不断收到“此浏览器或应用程序可能不安全”的错误
我用来登录的函数是:
async function loginToChrome(driver, username, password) {
await driver.get("https://accounts.google.com/signin");
await driver.sleep(1000);
let email_phone = await driver.findElement(
By.xpath("//input[@id='identifierId']")
);
await email_phone.sendKeys(username);
await driver.findElement(By.id("identifierNext")).click();
await driver.sleep(1000);
let passEl = await driver.findElement(By.xpath("//input[@name='password']"));
await passEl.sendKeys(password);
await driver.findElement(By.id("passwordNext")).click();
await driver.sleep(1000);
}
这是与https://stackoverflow.com/questions/59433453/unable-to-log-into-google-account-in-selenium-chrome-driver和https://stackoverflow.com/questions/59276975/couldnt-sign-you-in-this-browser-or-app-may-be-insecure-python-selenium-chrome相同的问题
我试过使用chrome和firefox的驱动程序,但都不起作用,我也试过使用.excludeSwitches(['enable-automation'])
,但也没有帮助。
这让我想到,也许登录页面可以检测到我在自动化环境中运行。我尝试了这个解决方案,它可以隐藏应用程序在Web驱动程序中运行:Can a website detect when you are using selenium with chromedriver?
我也调查了X11M1N1X,看看这是否是问题所在,但我发现它与我的普通Chrome One完全相同。
所有这些都不起作用,这让我陷入了困境。我见过一些解决方案,说要使用一个已经创建的用户配置文件,从您的正常安装的 chrome ,但这不会为我的用例工作。
有人找到解决这个问题的办法了吗?我已经找了几个小时了,但一无所获。
**编辑:**最近这似乎得到了很多关注。我找到了一个解决方案,可以让我继续使用自动化客户端而不会有太多问题。切换到Puppeteer。查看以下软件包:
"puppeteer",
"puppeteer-extra",
"puppeteer-extra-plugin-stealth"
编辑2:我看到这个最近得到了很多关注。我找到了我最终用来登录的代码。我用puppeteer代替selenium来做这个
async function login(
page: Page,
username: string,
password: string,
backup: string
) {
await page.goto("https://accounts.google.com/");
await page.waitForNavigation();
await page.waitForSelector('input[type="email"]');
await page.click('input[type="email"]');
await page.waitForNavigation();
//TODO : change to your email
await page.type('input[type="email"]', username);
await page.waitForSelector("#identifierNext");
await page.click("#identifierNext");
await page.waitFor(1000);
await page.waitForSelector('input[type="password"]');
await page.click('input[type="password"]');
await page.waitFor(500);
//TODO : change to your password
await page.type('input[type="password"]', password);
await page.waitForSelector("#passwordNext");
await page.click("#passwordNext");
await page.waitForNavigation();
}
型
6条答案
按热度按时间t40tm48m1#
以下内容也适用于我:1.尝试登录stackoverflow与您的谷歌帐户2.一旦登录,去电子邮件
以下是解决方案
谢谢
pokxtpni2#
经过几个小时的反复试验,我刚刚尝试了一些对我有效的东西。
将
args: ['--disable-web-security', '--user-data-dir', '--allow-running-insecure-content' ]
添加到我的配置中解决了这个问题。后来我意识到这并没有帮到我,因为我尝试了另一个电子邮件,它没有工作。经过一些观察,我想出了其他的东西,这已经被尝试和测试。
使用自动化:
Go to https://stackoverflow.com/users/login Select Log in with Google Strategy输入谷歌用户名和密码登录Stackoverflow Go to https://gmail.com(或任何你想访问的谷歌应用)
在坚持这样做了一整天(大约24小时)之后,尝试直接自动登录gmail(或者任何你想访问的谷歌应用程序)...我已经有至少两个人成功地做到了这一点。PS -你可能想继续使用stackoverflow登录,直到你至少得到一个验证码请求,因为我们也都经历过这个阶段。
66bbxpm53#
一个对我有效的解决方法是在webdriver启动的chrome示例中创建一个google账户,使用这个新创建的账户对我有效,但我不知道它和其他google账户有什么区别。
6ss1mwsb4#
以下是对我有效的方法:
我使用的是Puppeteer,但我敢打赌,这是相同的任何自动脚本。
必须有一个userDataDirectory,以便浏览器可以使用相同的存储信息。
您必须首先使用
headless: false
运行脚本,以便打开浏览器。如果您尝试在当前选项卡(自动导航的选项卡)上登录,则每次尝试登录时都会收到该错误。诀窍(对我来说)是打开一个新的标签页,手动导航,再试一次。
下次运行该脚本时,无需登录。
fjnneemd5#
尝试使用undetected_chromedriver库:
!pip安装未检测到的chromedriver
导入undetected_chromedriver作为uc
driver = uc.Chrome(可执行路径='chromedriver.exe')#更改您的路径
驱动程序。get('https://accounts.google.com/ServiceLogin')#继续此处的工作代码...
对我来说效果很好
qjp7pelc6#
此错误消息...
...表示 WebDriver 无法验证浏览上下文,即浏览器会话。
潜在原因及解决方案
此错误背后可能有多种原因,如下所示:
溶液
在这些情况下,相应的解决方案是:
您可以在登录到gmail帐户失败(selenium自动化)中找到详细的讨论
时间;日期
一对夫妇的相关文件: