Selenium 结合Autoit处理安全对话框(Windows Security)

    在使用Selenium进行自动化过程中,如果遇到如下弹出窗口,Selenium不能直接进行处理,需要借助其他工具实现,其中Autoit是常见的处理方式。

Selenium 结合Autoit处理安全对话框(Windows Security)_第1张图片

    Autoit是一款小巧的工具,常用在自动化部署和测试当中。以下代码为处理安全对话框的代码,兼容windows 7和windows 10。

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****

#AutoIt3Wrapper_Icon=Key_Lock_128px_1178033_easyicon.net.ico

#AutoIt3Wrapper_Compression=3

#AutoIt3Wrapper_UseUpx=y

#AutoIt3Wrapper_UseX64=n

#AutoIt3Wrapper_Change2CUI=y

#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

Dim$inputnum=$CmdLine[0]

If$inputnum==2Then

Dim$account=$CmdLine[1]

Dim$password=$CmdLine[2]

ConsoleWrite("Input parameter: "&$account&" "&$password&@CRLF)

Else

Dim$account="admin"

Dim$password="password"

ConsoleWrite("Use default parameter: "&$account&" "&$password&@CRLF)

EndIf

DimConst$tip00="Search Windows"

DimConst$tip01="Get Windows: "

DimConst$tip02="Windows Version: "

DimConst$tip03="User Name: "

DimConst$tip04="Password: "

DimConst$tip05="Press OK"

DimConst$tip06="Finishing"

DimConst$tip07="Finished"

DimConst$tip11="Input Info"

DimConst$tip21="Finishing"

DimConst$delay=2*1000

Dim$ret=0

Dim$dialogTitle=""

Dim$dialogTitleCN1="Windows 安全性"

Dim$dialogTitleEN1="Windows Security"

ProgressOn("Operation on Windows Security",$tip00,"",10,10)

ProgressSet(10)

IfWinExists($dialogTitleCN1)==1Then

WinActivate($dialogTitleCN1)

WinWaitActive($dialogTitleCN1,"",120);

$dialogTitle=$dialogTitleCN1;

ElseIfWinExists($dialogTitleEN1)==1Then

WinActivate($dialogTitleEN1)

WinWaitActive($dialogTitleEN1,"",120);

$dialogTitle=$dialogTitleEN1;

Else

$ret=$ret+1

$dialogTitle="Not Found Windows"

EndIf

Sleep($delay)

ConsoleWrite($tip01&$dialogTitle&@CRLF)

ProgressSet(20,$tip01&$dialogTitle)

Sleep($delay)

ConsoleWrite($tip02&@OSVersion&@CRLF)

ProgressSet(30,$tip02&@OSVersion)

Sleep($delay)

If@OSVersion=="WIN_10"Then

ProgressSet(40,$tip03&$account,$tip11)

ConsoleWrite($tip03&$account&@CRLF)

#Send("admin{TAB}")

ifControlSend($dialogTitle,"","",$account&"{TAB}")<>1Then

$ret=$ret+2

ConsoleWrite("Input User name error"&@CRLF)

ProgressSet(50,"Input User name error",$tip11)

EndIf

sleep($delay)

ProgressSet(60,$tip04&$password,$tip11)

ConsoleWrite($tip04&$password&@CRLF)

#Send("password")

IfControlSend($dialogTitle,"","",$password)<>1Then

$ret=$ret+4

ConsoleWrite("Input password error"&@CRLF)

ProgressSet(70,"Input password error",$tip11)

EndIf

sleep($delay)

ProgressSet(80,$tip05,$tip11)

ConsoleWrite($tip05&@CRLF)

#Send("{ENTER}")

IfControlSend($dialogTitle,"","","{ENTER}")<>1Then

$ret=$ret+8

ConsoleWrite("Input ENTER error"&@CRLF)

ProgressSet(85,"Input ENTER error",$tip11)

EndIf

Sleep($delay)

Else

ProgressSet(40,$tip03&$account,$tip11)

ConsoleWrite($tip03&$account&@CRLF)

ifControlSetText($dialogTitle,"","Edit1",$account)<>1Then

$ret=$ret+2

ConsoleWrite("Input User name error"&@CRLF)

ProgressSet(50,"Input User name error",$tip11)

EndIf

Sleep($delay)

ProgressSet(60,$tip04&$password,$tip11)

ConsoleWrite($tip04&$password&@CRLF)

IfControlSetText($dialogTitle,"","Edit2",$password)<>1Then

$ret=$ret+4

ConsoleWrite("Input password error"&@CRLF)

ProgressSet(70,"Input password error",$tip11)

EndIf

sleep($delay)

ProgressSet(80,$tip05,$tip11)

ConsoleWrite($tip05&@CRLF)

IfControlClick($dialogTitle,"","Button2")<>1Then

$ret=$ret+8

ConsoleWrite("Press OK button error"&@CRLF)

ProgressSet(85,"Press OK button error",$tip11)

EndIf

Sleep($delay)

EndIf

ProgressSet(90,$tip06,$tip21)

ConsoleWrite($tip06&@CRLF)

Sleep($delay)

ProgressSet(100,$tip07,$tip21)

ConsoleWrite($tip07&@CRLF)

Sleep($delay)

ProgressOff()

ConsoleWrite("Exit code: "&$ret&@CRLF)

Exit($ret)

代码解释:

#AutoIt3Wrapper_Change2CUI=y: 指定编译为CMD。

$CmdLine[1]和CmdLine[2] 代表命令行的第一个参数和第二参数。

ConsoleWrite(): 写信息到控制台。

ProgressOn(),ProgressSet(),ProgressOff(): 弹出进度条视窗函数,直观显示当前的进度。

@OSVersion: 系统版本,这里用来区分win7和win10。

WinExists($dialogTitleCN1): 判断窗口是否存在,支持多语言窗口操作。

WinActivate($dialogTitleCN1): 激活窗口

ControlSend($dialogTitle, "", "", $account & "{TAB}"): 发送值到指定窗口,win10下找不到输入框属性,使用TAB切换输入框。

ControlSetText($dialogTitle,"","Edit1",$account):发送值到指定输入框。

ControlClick($dialogTitle,"","Button2"): 点击指定按钮。

以上代码使用autoit编译为exe后,在python中调用即可实现安全对话框的操作。

调用格式如下:

******.exe username password

你可能感兴趣的:(Selenium 结合Autoit处理安全对话框(Windows Security))