我必须访问一个URL,使用凭据登录,然后选择一个区域名称并单击“显示”按钮,以便显示HTML页面中的最近帐单(我使用Selenium脚本所做的所有操作)。 / p>
该页面上有一个按钮打印选项。单击后,将出现打印弹出窗口,我需要单击 OK 。但是我也无法使用AutoIt脚本来做到这一点。
对于Firefox和Chrome,这两个弹出窗口有所不同。如何处理这些?我尝试使用AutoIt脚本,并在Selenium脚本中使用Runtime .exec(文件名)对其进行调用,但对我都不起作用。
WinWait("Print", "", 5000)
If WinExists("Print", "") Then
Send("OK{ENTER}")
EndIf
Sleep(5000)
WinWait("Save Print Output As", "", 5000)
If WinExists("Save Print Output As", "") Then
ControlFocus("Save Print Output As", "", "Edit1")
Sleep(5000)
ControlSetText("Save Print Output As", "", "Edit1", "H282")
Sleep(5000)
ControlClick("Save Print Output As", "", "Button2")
EndIf
我还需要针对不同区域多次运行该脚本,但是在第一次运行后它将停止执行。
“打印”和“另存为打印输出”弹出窗口信息工具摘要-
AutoIt Window Info of Print pop-up
AutoIt Window Info of 'Save as Print Output' for the Field to Enter File Name
AutoIt Window Info of 'Save as Print Output' for the Save Field
问题Iselenium代码执行得很好,当单击打印选项然后处理打印窗口时,将调用使用.exe文件并开始在后台运行。但不起作用。打开打印窗口后,执行将停止。
Now the New pop-up is seen , when file name is entered in 'Edit1" for each different file name
答案 0 :(得分:0)
Opt("TrayIconDebug", True)
; String in filename to replace with an incremented integer.
$sTag = "++1"
; Show custom progress window (True|False).
$bEnableProgress = True
Switch $CMDLINE[0]
Case 0
Exit
Case 1
If $CMDLINE[1] = '/?' Then
; Help message.
_HelpMsg()
Exit
Else
; Assign default command line array.
$aFilenames = $CMDLINE
EndIf
Case 2
; If not $sTag in the 1st argument, then goto the next case.
If Not StringInStr($CMDLINE[1], $sTag) Then ContinueCase
; If the 2nd argument is not an integer, then goto the next case.
If Not StringIsInt($CMDLINE[2]) Then ContinueCase
; Create array with filenames starting from index 1.
Global $aFilenames[$CMDLINE[2] + 1]
$aFilenames[0] = Int($CMDLINE[2])
; Find first filepath that does not exist and set an offset.
$iOffset = 0
For $i1 = 1 To 1000
If Not FileExists(StringReplace($CMDLINE[1], $sTag, $i1, -1)) Then
$iOffset = $i1 - 1
ExitLoop
EndIf
Next
; Assign the array with filenames, replacing tag with an integer.
For $i1 = 1 To $aFilenames[0]
$aFilenames[$i1] = StringReplace($CMDLINE[1], $sTag, $i1 + $iOffset, -1)
Next
Case Else
; Assign default command line array.
$aFilenames = $CMDLINE
EndSwitch
If $bEnableProgress Then
ProgressOn(@ScriptName, 'SaveAs')
EndIf
For $i1 = 1 To $aFilenames[0]
; Filename to save as.
$sSaveAsFilename = $aFilenames[$i1]
; Print window.
$hPrint = WinWait("Print")
ControlClick($hPrint, "", "OK")
; Progress window.
$hProgress = WinWait("Printing")
; Save As window.
$hSaveAs = WinWait("Save Print Output As")
Do
Sleep(500)
ControlSetText($hSaveAs, "", "Edit1", $sSaveAsFilename)
Until ControlGetText($hSaveAs, "", "Edit1") = $sSaveAsFilename
Sleep(500)
If $bEnableProgress Then
ProgressSet(100 / $aFilenames[0] * $i1, $sSaveAsFilename)
EndIf
ControlClick($hSaveAs, "", "Button2")
AdlibRegister("_ConfirmSaveAs")
WinWaitClose($hSaveAs)
AdlibUnRegister("_ConfirmSaveAs")
; Wait for the progress window to close.
WinWaitClose($hProgress)
Next
If $bEnableProgress Then ProgressOff()
Exit
Func _ConfirmSaveAs()
; Handle possible msgbox to confirm overwrite.
If WinExists("Confirm Save As") Then
ControlClick("Confirm Save As", "", "&Yes")
EndIf
EndFunc
Func _HelpMsg()
; Help message.
MsgBox(0, @ScriptName, _
"Automates the standard print dialog from a web browser." & @CRLF & _
@CRLF & _
"Syntax:" & @CRLF & _
" " & @ScriptName & " filepath [filepath] ..." & @CRLF & _
" " & @ScriptName & " filepath integer" & @CRLF & _
@CRLF & _
"1st syntax can pass 1 or more filepath arguments." & @CRLF & _
@CRLF & _
"2nd syntax replaces the tag " & $sTag & " from right side of the " & _
"1st argument with an incremented integer (starting from 1). " & _
"Example: test" & $sTag & ".pdf will start with test1.pdf and end " & _
"with testN.pdf (which N is the integer set by the 2nd argument)." & @CRLF & _
@CRLF & _
"Tested with Firefox 63 on Windows 10.")
EndFunc
filename | filepath可以作为参数传递。 如果要另存为1个文件名,请使用:
scriptname.exe "C:\SaveFolder\a.pdf"
您也可以在同一执行中执行很多操作,即:
scriptname.exe "C:\SaveFolder\a.pdf" "C:\SaveFolder\b.pdf" ...
如果要使用整数增加文件名,则:
scriptname.exe "C:\SaveFolder\a++1.pdf" 3
其中的++1
将被替换为一个整数,并将其处理为:
scriptname.exe "C:\SaveFolder\a1.pdf" "C:\SaveFolder\a2.pdf" "C:\SaveFolder\a3.pdf"
第一个参数必须包含字符串++1
和
第二个参数必须是整数才能被识别
作为要增加的基本文件名。
可以使用/?
作为唯一参数来显示帮助消息框。
同一执行中的许多参数可能不适合控制 可以选择在Selenium脚本中。
这些窗口是标准的打印对话框,因此有所不同 Chrome和Firefox之间可能没有。 如果从以下位置打印,则“打印”窗口不相同 即记事本,因此该窗口不能视为标准窗口。
将$sSaveAsFilename
设置为将要设置的值
进入标题为“文件名:”的编辑控件
“将打印输出另存为”。
Opt
的 TrayIconDebug
参数将显示当前
当鼠标光标悬停在系统托盘中的行时
图标。
因此,如果它停滞了,那么您可以跟踪它是否被困住了。
这是一个可选的函数调用。
这已在Windows 10虚拟机中进行了测试
使用Firefox 63。
窗户看起来很慢
在显示中,这就是检查Edit1
的原因
在继续之前正确的字符串。替代
是在使用Opt()
和参数WinWaitDelay
大约1000
会在窗口显示后暂停,
尽管该脚本平均可能需要更长的时间才能完成。
我添加了一个AdlibRegister
函数以进行重复
测试,可能仍然有用,因为文件名可能
在不知不觉中存在需要处理的东西。
首先等待“打印”窗口, 只是为了阻止脚本在关闭之前关闭 打印进度完成。 如果不需要,请删除相关代码。
答案 1 :(得分:0)
$check = True
$printClicked = False
$saveClicked = False
While($check)
If WinExists("Print", "") Then
Send("{ENTER}")
$printClicked = True
EndIf
If WinExists("Save Print Output As", "") Then
ControlFocus("Save Print Output As", "", "Edit1")
Sleep(50)
ControlSetText("Save Print Output As", "", "Edit1", "H282")
Sleep(50)
ControlClick("Save Print Output As", "", "Button2")
$saveClicked = True
EndIf
If($printClicked = True And $saveClicked = True) Then
;~ set the $check here
ExitLoop
EndIf
WEnd
如果这不起作用,则意味着您没有正确获得控件。
发送Autoit
工具的输出