gpt4 book ai didi

selenium - 处理 Chrome 上弹出的 Windows 身份验证

转载 作者:行者123 更新时间:2023-12-02 19:50:41 25 4
gpt4 key购买 nike

我正在尝试使用 AutoIt 处理我的 Selenium Webdriver 脚本的基本身份验证弹出窗口。我为 Firefox 和 Internet Explorer 编写了一个脚本,但它不适用于 Chrome。

当我尝试使用 AutoIt Window Information Tool 识别 Chrome 上弹出的身份验证时结果是空的。我正在使用以下 AutoIt 脚本:

WinWaitActive("Authentication Required","","120")
If WinExists("Authentication Required") Then
Send("username{TAB}")
Send("password{Enter}")
EndIf

任何让它发挥作用的指示都会有所帮助。我没有使用 username@password:google.com,因为重定向时会出现一些身份验证弹出窗口。

最佳答案

首先你不需要AutoIt,你可以只使用Windows API。其次,Chrome 的基本身份验证对话框不是传统的 Window,因此您无法获取它的句柄(尝试使用 Spy++)。这样做的唯一原因是如果您在调用 SendKeys 之前没有将另一个窗口带到前台。您需要找到父 Chrome 窗口(可能类似于“URL - Google Chrome”),将其移动到前面,然后发送 key 。这是一个例子:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr point);

[DllImport("user32.dll")]
private static extern IntPtr FindWindow(string className, string windowTitle);

public static void SendBasicAuthentication(string username, string password, string windowTitle)
{
var hwnd = FindWindow(null, windowTitle);
if (hwnd.ToInt32() <= 0 || !SetForegroundWindow(hwnd)) return;
SendKeys.SendWait(username.EscapeStringForSendKeys());
SendKeys.SendWait("{TAB}");
SendKeys.SendWait(password.EscapeStringForSendKeys());
SendKeys.SendWait("{ENTER}");
}

static string EscapeStringForSendKeys(this string input)
{
// https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.aspx
// must do braces first
return input.Replace("{", "{{}")
.Replace("}", "{}}")
.Replace("^", "{^}")
.Replace("%", "{%}")
.Replace("~", "{~}")
.Replace("(", "{(}")
.Replace(")", "{)}")
.Replace("[", "{[}")
.Replace("]", "{]}");
}

希望有帮助。

关于selenium - 处理 Chrome 上弹出的 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19357634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com