自动化场景脚本循环跑差不多两个小时后报AutoIt Error错
为什么我的自动化脚本在循环好几次后,会报AutoIt Error的错,有人也有遇到这个问题吗? 本帖最后由 yurong 于 2016-12-4 20:00 编辑#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.14.2
Author: myName
Script Function:
Template AutoIt script.
1.保存两张图图片到桌面,分别命名1111.jpg和2222.jpg
2.Chrom浏览器设置勾选新的标签页
3.酷狗音乐播放器设置勾选关闭今日推荐
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <MsgBoxConstants.au3>
#include <Word.au3>
#include <String.au3>
#Include <EXCEL.au3>
#include <file.au3>
Local $a=0
While $a<1
Sleep(10000)
;音乐播放器
musicTest()
Sleep(3000)
WinMinimizeAll()
WinMinimizeAll()
Sleep(5000)
;Excel使用
excelTest()
Sleep(3000)
WinMinimizeAll()
Sleep(5000)
;ie浏览器
ieTest()
Sleep(3000)
WinMinimizeAll()
Sleep(5000)
;Word使用
wordTest2()
Sleep(3000)
WinMinimizeAll()
Sleep(5000)
;Excel使用
excelTest()
Sleep(3000)
WinMinimizeAll()
Sleep(5000)
;暂停音乐
stopmusicTest()
Sleep(2000)
WinMinimizeAll()
WinMinimizeAll()
Sleep(3000)
;Chrome使用
chromtest()
Sleep(50000)
WinMinimizeAll()
WEnd
Func musicTest()
Run("C:\Program Files\KuGou\KGMusic\KuGou.exe")
Sleep(3000)
Send("{SPACE}")
EndFunc
Func ieTest()
run('"C:\Program Files\Internet Explorer\iexplore.exe" http://www.baidu.com',"",@SW_MAXIMIZE)
$oIE = WinWait("","",90)
Sleep(3000)
Send("shaonianruntu{SPACE}{SPACE}")
Sleep(1000)
Send("{ENTER}")
MouseMove(1350,300,20)
Sleep(2000)
MouseClick("left")
MouseWheel("down", 60)
Sleep(2000)
MouseWheel("up", 10)
Sleep(2000)
MouseWheel("down", 60)
MouseWheel("up",50)
Sleep(2000)
WinClose("")
EndFunc
Func excelTest()
WinMinimizeAll()
;表格行数
Dim $row_n=100
Dim $password="123456"
;创建excel应用程序对象
$xls = ObjCreate("Excel.Application")
;显示
$xls.visible=1
;添加新工作簿
$obj_xls=$xls.Workbooks.Add
WinActivate($xls)
Sleep(3000)
;关闭激活窗口给
If WinExists("") Then
Send("{c down}")
Send("{cup}")
EndIf
$xls.DisplayAlerts = False
;$obj_xls.Worksheets("Sheet3").Delete
;$oExcel.Worksheets("Sheet2").Delete
$xls.DisplayAlerts = True
;激活窗口
$obj_xls.Worksheets("Sheet1").Activate
$xls_sup=$obj_xls.WorkSheets(1)
$xls_sup.name="云办公自动化测试"
;设置垂直对齐方式为居中
$xls_sup.Cells.VerticalAlignment=-4108
;设置水平对齐方式为居中
$xls_sup.Cells.HorizontalAlignment=-4108
;合并单元格
$xls_sup.Range("A1:D1").merge(True)
$xls_sup.Cells(1, 1).Value ="自动化测试"
;设置第一行高度
$xls_sup.Rows(1).RowHeight =40
;设置字体
With $xls_sup.Range("A1:D1")
.font.size=16
.Range("A1:D1").font.bold=True
.Range("A1:D1").font.name="楷体_GB2312"
EndWith
;InchesToPoints函数,将英寸转为磅值。
$xls_sup.Columns(1).ColumnWidth=$obj_xls.Application.InchesToPoints(0.2)
$xls_sup.Columns(2).ColumnWidth=$obj_xls.Application.InchesToPoints(0.2)
$xls_sup.Columns(3).ColumnWidth=$obj_xls.Application.InchesToPoints(0.2)
$xls_sup.Columns(4).ColumnWidth=$obj_xls.Application.InchesToPoints(0.2)
$xls_sup.Rows(2).RowHeight =24
$xls_sup.Cells(2, 1).Value ="学生学号"
$xls_sup.Cells(2, 2).Value ="学生姓名"
$xls_sup.Cells(2, 3).Value ="学生成绩"
$xls_sup.Cells(2, 4).Value ="学生性别"
For $z=1 To $row_n
$xls_sup.Rows($z+2).RowHeight =24
$xls_sup.Rows($z+2).HorizontalAlignment=-4108
$xls_sup.Rows($z+2).VerticalAlignment=-4108
$xls_sup.Cells($z+2, 1).Value =$z
Sleep(1000)
$xls_sup.Cells($z+2, 2).Value =("张三")
Sleep(1000)
$xls_sup.Cells($z+2, 3).Value ="98"
Sleep(1000)
$xls_sup.Cells($z+2, 4).Value ="男"
Sleep(1000)
Next
$xls_sup.Range("A2:D"&($row_n+2)).Borders(11).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(12).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(7).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(7).Weight=3
$xls_sup.Range("A2:D"&($row_n+2)).Borders(8).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(8).Weight=3
$xls_sup.Range("A2:D"&($row_n+2)).Borders(9).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(9).Weight=3
$xls_sup.Range("A2:D"&($row_n+2)).Borders(10).LineStyle=1
$xls_sup.Range("A2:D"&($row_n+2)).Borders(10).Weight=3
;加入公式
;$xls_sup.Range("B3").Formula = "=B2"
$obj_xls.Windows(1).DisplayGridlines=False
$obj_xls.Windows(1).DisplayHeadings = False
$xls_sup.Range("A1:D"&($row_n+2)).Locked = True
$xls_sup.Protect($password)
$obj_xls.Protect($password, True)
$obj_xls.SaveAs(@DesktopDir & "\test.xls")
$obj_xls.Save
$xls.quit
Sleep(2000)
FileDelete("C:\Users\user\Desktop\test.xls")
EndFunc
Func chromtest()
Run("C:\Program Files\Google\Chrome\Application\chrome.exe", "", @SW_SHOWMAXIMIZED)
Local $oChrom=WinWait("", "", 10)
WinSetState($oChrom,"",@SW_SHOWMAXIMIZED)
Send("www.iqiyi.com")
Sleep(1000)
Send("{ENTER}")
Send("{ENTER}")
Sleep(1000)
Send("jinxiuweiyang{SPACE}")
Sleep(1000)
Send("{ENTER}")
WinClose("")
Run("C:\Program Files\Google\Chrome\Application\chrome.exe", "", @SW_SHOWMAXIMIZED)
Local $oChrom=WinWait("", "", 90)
WinSetState($oChrom,"",@SW_SHOWMAXIMIZED)
Send("http://www.iqiyi.com/v_19rr9convg.html#vfrm=2-3-0-1")
Sleep(1000)
Send("{ENTER}")
Send("{ENTER}")
ProcessClose($oChrom)
WinClose("")
EndFunc
Func stopmusicTest()
Run("C:\Program Files\KuGou\KGMusic\KuGou.exe")
Sleep(3000)
Send("{SPACE}")
WinClose("")
EndFunc
Func wordTest2()
Local $word = ObjCreate("word.application")
$word.visible = True
Local $Document = $word.documents.add
WinActivate($Document.Name)
Sleep(5000)
If WinExists("") Then
Send("{c down}")
Send("{cup}")
EndIf
$Document.tables.add($Document.range,20,2)
Local $i
With $Document.tables(1)
For $i = -6 To -1
$Document.tables(1).borders($i).linestyle=1;此处在循环多变之后会报错
_FileWriteLog("c/yr.log", $i+"=报错的次数,这个是数字", -1)
Sleep(1000)
Next
For $i = 1 To 20
_FileWriteLog("c/yr.log", $i+"=报错的次数,这个是图片", -1)
$Document.tables(1).cell($i,1).range.inlineshapes.addpicture(@DesktopDir&"\1111.jpg",false,true);此处在循环多变之后会报错
Sleep(2000)
$Document.tables(1).cell($i,2).range.inlineshapes.addpicture(@DesktopDir&"\2222.jpg",false,true)
Sleep(1000)
Next
EndWith
_Word_DocSaveAs($Document, @DesktopDir & "\_word_test2.doc")
;关闭word窗口
_Word_DocClose($Document)
WinClose("Microsoft Word","")
;删除word
FileDelete("C:\Users\user\Desktop\_word_test2.doc")
;循环时间间隔2s
Sleep(2000)
EndFunc 释放内存看看! 好的 谢谢楼上 应该如何释放内存呢? Func _ReduceMemory($i_PID = -1);释放内存
If $i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return
EndFunc ;==>_ReduceMemory 回复 5# yurong
我的方向 不太一樣........我倒覺得不一定是 記憶體問題
簡單的說上面的程式 應該是一直再重複 做某些事 或者收集資料而這些東西都是變動的....
既然是變動的就難保有時候會遇到一些 意外的狀況 導致 程式出問題....
我的建議是能不能 稍微修改腳本......
重複地做一些 可以確定內容不變的東西......然後一樣跑兩個小時 看看會不會出問題
前提是 這中間所有的東西 都是固定 可控制的.... 回复 2# yurong
如果没猜错,报错应该是“ The requestsd action with this object has failed”
如果是,把au3换成3.3.14.2以下的版本,代码原封不动编译下运行(因为14以上版本对COM支持就是个渣)
如果不是,当我没说 回复 8# komaau3
挖哩勒
有這問題~~~那不就 得繼續使用3.3.8版本@@ 回复 8# komaau3
还有珍藏版本? 回复 10# heroxianf
珍藏倒没有,用这个
感动 谢谢楼上们!
页:
[1]