我正在使用Kantu(Selenium IDE,类似于chrome的扩展)来实现一些Web自动化。
在我的程序本身中,有一个无限循环,用标签和goto构建,所以类似于:
In [19]: df.index = pd.to_datetime(df.index).strftime('%d-%m-%Y')
In [20]: df
Out[20]:
A B
02-01-2018 100.000000 100.000000
03-01-2018 100.808036 100.325886
04-01-2018 101.616560 102.307700
在代码部分中,有一些变量声明(大多数是label: start
*some code*
goto: start
)。
正如我所说的那样,执行速度越来越慢,你可以清楚地看到它每秒3次,就像3秒内一次一样。
有趣的是,在Chrome Taskmanager(Shift + ESC)中,Kantu RAM的使用率越来越高。每当我停止脚本时,关闭Kantu并重新打开它并再次启动脚本,它再次罚款,所以它再次每秒3次。
因此看起来Kantu运行时间越长,RAM使用率就越高。并且似乎没有自动将其设置回来。
有人碰巧知道问题是什么吗?我唯一想到的是,它可能为每个storeEval
创建一个新变量,即使它是相同的变量名称?这听起来合乎逻辑吗?可能这个?如果是的话,我能改变它吗?如果没有,还有什么可能是问题?
我想到的另一件事是日志,在Kantu窗口中,有日志,它们永远不会被自动清除。清除它们也可以释放RAM,使脚本也更快一些。有没有办法自动删除日志或根本不记录?
感谢您的帮助!
答案 0 :(得分:0)
我使用!runtime来衡量这一点,你是对的。在我的测试中它来自
[echo]循环1占用了0.07 ...
到
[echo]循环956花了0.15 ......
我建议您在github repo将其报告为错误。
真正的解决方案可能需要一些严肃的调试。但作为解决方法,您可以使用command line feature定期启动Chrome和宏,然后在几分钟后close Chrome启动,然后重新开始。 Powershell或Python脚本可以做到这一点。
我的测试:
{
"CreationDate": "2018-3-6",
"Commands": [
{
"Command": "store",
"Target": "fast",
"Value": "!replayspeed"
},
{
"Command": "store",
"Target": "1",
"Value": "i"
},
{
"Command": "open",
"Target": "https://stackoverflow.com/questions/49138473/kantu-getting-slower-and-slower",
"Value": ""
},
{
"Command": "label",
"Target": "111",
"Value": ""
},
{
"Command": "store",
"Target": "${!runtime}",
"Value": "starttime"
},
{
"Command": "click",
"Target": "id=question-header",
"Value": ""
},
{
"Command": "storeEval",
"Target": "parseFloat(\"${!runtime}\")-parseFloat(\"${starttime}\")",
"Value": "t"
},
{
"Command": "echo",
"Target": "loop ${i} took ${t}",
"Value": "blue"
},
{
"Command": "storeEval",
"Target": "${i} + 1",
"Value": "i"
},
{
"Command": "gotoLabel",
"Target": "111",
"Value": ""
}
]
}