搜索
aardio官方社区 门户 查看主题

从网站上批量下载文件为何不能循环执行?

发布者: ycdb | 发布时间: 2017-3-25 20:22| 查看数: 811| 评论数: 2|帖子模式

各位老师:
下面的代码是一段从局域网的服务器上批量下载文件的客户端的源码?为什么只能执行一次呢?第一次目录结构已经自动建立完成,但是为什么不能循环执行代码?

服务器上的目录结构为:目标网站\成品网站\专业网站\卷册网址\文件

错误信息为:
---------------------------
RAW CALLBACK ERROR
---------------------------
按 Ctrl + C复制错误信息
---------------------------------------------------
文件:D:\编程\@aardio\lib\web\form\_.aardio
错误行号:#551
错误:COM error
拒绝访问。
---------------------------------------------------
调用栈:
        [kernel]: in function 'getElementsByTagName'
        D:\编程\@aardio\lib\web\form\_.aardio:551: in function 'eachAll'
        D:\编程\@aardio\lib\web\form\_.aardio:423: in function 'queryEles'
        [string "import web.form;..."]:135: in function 'oncommand'
        D:\编程\@aardio\lib\win\ui\_.aardio:551: in function 'proc'
        D:\编程\@aardio\lib\win\ui\_.aardio:253: in function <D:\编程\@aardio\lib\win\ui\_.aardio:245>
        [kernel]: in function 'messageTranslateDispatch'
        D:\编程\@aardio\lib\win\_.aardio:712: in function 'parseMessage'
        D:\编程\@aardio\lib\win\_.aardio:748: in function 'loopMessage'
        [string "import web.form;..."]:167: in main chunk
---------------------------
确定   




  1. import web.form;
  2. import web.form.util;
  3. import win.ui;
  4. import web.uploadData;
  5. import web.util;
  6. /*DSG{{*/
  7. var winform = win.form(text="批量下载1.0";right=762;bottom=561;parent=...)
  8. winform.add(
  9. button={cls="button";text="下载";left=13;top=90;right=176;bottom=126;z=2};
  10. listview={cls="listview";left=718;top=33;right=743;bottom=528;aw=1;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1}
  11. )
  12. /*}}*/

  13. //创建web窗体
  14. var wb = web.form( winform,0x40000/*_UIFLAG_THEME*/ ) ;
  15. wb.noScriptErr = true;


  16. //******************以下均为创建浏览器的内容
  17. //自动启用禁用 前进、后退等按钮
  18. wb.CommandStateChange=function(cmd,enable) {
  19.     select(cmd) {
  20.         case 0x2/*_CSC_NAVIGATEBACK*/ {
  21.             wb.getEle("btnBack").disabled = !enable
  22.         }
  23.         case 0x1/*_CSC_NAVIGATEFORWARD*/ {
  24.             wb.getEle("btnForward").disabled = !enable
  25.         }   
  26.     }
  27. }   

  28. //使用external接口定义网页脚本可调用的本地函数
  29. wb.external = {
  30.         func = function( num ){
  31.                 winform.text = "网页脚本调用aardio函数,参数:" + num
  32.         }
  33. }

  34. winform.show(); //显示窗体


  35. wb.BeforeNavigate2=function( pDisp, url, Flags, TargetFrameName, PostData, Headers, Cancel ) {
  36.         winform.text = "正在打开 " + url + " ......";  
  37.        
  38.         ele = wb.getEle("txtUrl");
  39.         if(ele){
  40.                 ele.value = wb.location;
  41.         }
  42. }
  43. wb.DocumentComplete=function( pDisp, url) {
  44.         winform.text = wb.document.title;       
  45.         winform.text = wb.location;
  46.        
  47.         ele = wb.getEle("txtUrl");
  48.         if(ele){
  49.                 ele.value = wb.location;
  50.         }
  51. }  


  52. wb.external={
  53.         refresh = function(){
  54.                 wb.refresh2()
  55.         }
  56.         go = function(...){
  57.                 wb.go(...)
  58.         }
  59. }
  60. //******************************************以上均为创建浏览器的内容

  61. //初始化listview控件
  62. winform.listview.insertColumn("网址",180);
  63. winform.listview.insertColumn("文件名",180);
  64. winform.listview.insertColumn("状态",100);
  65. winform.listview.insertColumn("大小",80);
  66. winform.listview.insertColumn("速度",80);
  67. winform.listview.insertColumn("已下载",120);


  68. //创建下载线程管理器
  69. import thread.dlManager;
  70. var dlmgr = thread.dlManager(3/*最多允许五个线程同时下载*/);


  71. //响应下载事件
  72. dlmgr.onReceiveBegin = function(id,url,filename,statusText,httpStatusCode,totalSize,downSize){
  73.     winform.listview.setItemText( {url;filename;statusText;fsys.formatSize(totalSize);fsys.formatSize(downSize) },id )
  74. }
  75. dlmgr.onReceive = function(id,sizePs,downSize){
  76.     winform.listview.setItemText( fsys.formatSize(downSize),id,6);
  77.     winform.listview.setItemText( fsys.formatSize(sizePs) + "/s" ,id,5);
  78. }
  79. dlmgr.onEnd = function(id,savepath,resumePath,contentLength){
  80.         if( savepath ){
  81.         winform.listview.setItemText(  "已完成"  ,id,3);
  82.         winform.listview.setItemText( fsys.formatSize(contentLength),id,4);
  83.     }
  84.     else {
  85.         winform.listview.setItemText(  "已停止"  ,id,3);
  86.     }
  87.     winform.listview.setItemText(  "0KB/s"  ,id,5);
  88.     //fsys.delete(resumePath)
  89. }
  90. dlmgr.onError = function(id,err){
  91.     winform.listview.setItemText( err,id,3);
  92. }


  93. winform.button.oncommand = function(id,event){
  94.         winform.listview.clear();
  95.        
  96.                 //打开目标网站
  97.         wb.go("http://xxpp.com.cn.aspx")
  98.         wb.wait(,1000);
  99.         var ele1=wb.queryEles(id="viewlistDocumentLibrary");
  100.         var wz1=ele1[2].href;
  101.         var ml1=ele1[2].innerText;
  102.                 //打开成品网站
  103.                 if wz1!=null wb.go(wz1);
  104.                 wb.wait(,1000);
  105.                 //打开成品网址后,选取节点
  106.                 var ele2=wb.queryEles(className= "ms-vb-title");
  107.                 //打开专业网站
  108.                 for i=1;#ele2;1{
  109.                         var td = wb.queryEles(parent = ele2[i]; className = "ms-vb")
  110.                             var a= wb.queryEles( parent = td; tagName = "a")
  111.                             var wz2=a[i].href;
  112.                          var ml2=a[i].innerText;
  113.                                     if wz2!=null  wb.go(wz2);                       
  114.                                  wb.wait(,1000);
  115.                                  //打开专业网址之后,选取节点
  116.                                  var ele3=wb.queryEles(className= "ms-vb-title");
  117.                                  //打开卷册网站
  118.                                  for j=1;#ele3;1{
  119.                                          var bb=wb.queryEles( parent = ele3[j];className = "ms-vb")
  120.                                          var cc=wb.queryEles( parent = bb;tagName = "a")
  121.                                         
  122.                                          var wz3=cc[j].href;
  123.                                          var ml3=cc[j].innerText;
  124.                                                  if wz3!=null wb.go(wz3);                       
  125.                                                  wb.wait(,1000);
  126.                                                  //打开卷册网址之后,选取节点
  127.                                                  var  ele4=wb.queryEles(tagName="table";className= "ms-unselectedtitle");
  128.                                                  //开始下载
  129.                                                         for k=1;#ele4;1{
  130.                                                         var url=ele4[k].getAttribute("url");
  131.                                                         if(url!= null){
  132.                                                                 dlmgr.push(
  133.                                                                 id = winform.listview.addItem( url );
  134.                                                                         url = "http://xxpp.com.cn"+url;
  135.                                                                         savedir = "F:\图库\100"+ml1+""+ml2+""+ml3; //文件名可以省略
  136.                                                                         sleep(100);                                                                                                                               
  137.                                                  )
  138.                        
  139.                         }               
  140.                    
  141.                    
  142.                 }
  143.                
  144.                
  145.         }
  146.        
  147. }


  148. }
  149. winform.show();  
  150. win.loopMessage();
复制代码

最新评论

ycdb 发表于 2017-3-26 09:38:48
局部进行修改后,还是不行,今天早上醒来,觉得是第一层的循环有问题,修改了一下,还是不行
  1. for i=1;#ele2;1{
  2.                          var td = wb.queryEles(parent = ele2[i]; className = "ms-vb")
  3.                             var a= wb.queryEles( parent = td; tagName = "a")
  4.                             var wz2=a.href;
  5.                          var ml2=a.innerText;
  6.                             if wz2!=null  wb.go(wz2);                       
  7.                          wb.wait(,1000);
  8.                          //打开专业网址之后,选取节点
  9.                          var ele3=wb.queryEles(className= "ms-vb-title");
  10.                          //打开卷册网站
  11.                          for j=4;#ele3;1{
  12.                                  var bb=wb.queryEles( parent = ele3[j];className = "ms-vb")
  13.                                  var cc=wb.queryEles( parent = bb;tagName = "a")
  14.                                  var wz3=cc.href;
  15.                                  var ml3=cc.innerText;
  16.                                  if wz3!=null wb.go(wz3);                       
  17.                                  wb.wait(,1000);
复制代码

ycdb 发表于 2017-3-26 09:40:24
本帖最后由 ycdb 于 2017-3-26 09:48 编辑

局部进行修改后,还是不行,今天早上醒来,觉得是第一层及第二层的循环有问题,修改了一下,还是不行
而且,手动修改j的初始变量,由1变到4,均可以执行代码,但是,就是每次都会产生错误提示:
---------------------------
RAW CALLBACK ERROR
---------------------------
按 Ctrl + C复制错误信息
---------------------------------------------------
文件:D:\编程\@aardio\lib\web\form\_.aardio
错误行号:#551
错误:COM error
拒绝访问。
---------------------------------------------------
调用栈:
        [kernel]: in function 'getElementsByTagName'
        D:\编程\@aardio\lib\web\form\_.aardio:551: in function 'eachAll'
        D:\编程\@aardio\lib\web\form\_.aardio:423: in function 'queryEles'
        [string "import web.form;..."]:135: in function 'oncommand'
        D:\编程\@aardio\lib\win\ui\_.aardio:551: in function 'proc'
        D:\编程\@aardio\lib\win\ui\_.aardio:253: in function <D:\编程\@aardio\lib\win\ui\_.aardio:245>
        [kernel]: in function 'messageTranslateDispatch'
        D:\编程\@aardio\lib\win\_.aardio:712: in function 'parseMessage'
        D:\编程\@aardio\lib\win\_.aardio:748: in function 'loopMessage'
        [string "import web.form;..."]:162: in main chunk
---------------------------
确定   
---------------------------



  1. for i=1;#ele2;1{
  2.                          var td = wb.queryEles(parent = ele2[i]; className = "ms-vb")
  3.                             var a= wb.queryEles( parent = td; tagName = "a")
  4.                             var wz2=a.href;
  5.                          var ml2=a.innerText;
  6.                             if wz2!=null  wb.go(wz2);                       
  7.                          wb.wait(,1000);
  8.                          //打开专业网址之后,选取节点
  9.                          var ele3=wb.queryEles(className= "ms-vb-title");
  10.                          //打开卷册网站
  11.                          for j=4;#ele3;1{
  12.                                  var bb=wb.queryEles( parent = ele3[j];className = "ms-vb")
  13.                                  var cc=wb.queryEles( parent = bb;tagName = "a")
  14.                                  var wz3=cc.href;
  15.                                  var ml3=cc.innerText;
  16.                                  if wz3!=null wb.go(wz3);                       
  17.                                  wb.wait(,1000);
复制代码

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-11-23 21:00 , Processed in 0.062500 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表