aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 9999|回复: 7

求助:web.form获取网页上的gif

[复制链接]

7

主题

21

回帖

218

积分

二级会员

积分
218
发表于 2018-7-2 16:08:00 | 显示全部楼层 |阅读模式
求助如何获取网页上的gif
准备做验证码识别 验证码是动图

以下是测试列子  测试网页打开后向下滚动一小段就有动态验证码效果图  目标验证码类似这个效果

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="识别验证码演示";right=1108;bottom=716)
  4. mainForm.add(
  5. lblwb={cls="static";text="static";left=16;top=8;right=976;bottom=616;transparent=1;z=1}
  6. )
  7. /*}}*/
  8. import web.form;
  9. var wb = web.form( mainForm.lblwb,,);
  10. wb.noScriptErr=true;
  11. mainForm.show();
  12. wb.go("https://my.oschina.net/iyinghui/blog/1601564");
  13. wb.wait();
  14. var ele = wb.getElesByTag("img"); //顺便问下为何这里返回空
  15. win.msgbox(#ele);
  16. win.loopMessage();
复制代码


思路是把动态图按帧数截取做图像识别
问题:
1.动态图按帧截取 首先要获取这个gif 目前论坛只有http.get() 或者 剪贴板的例子 都不适用
因为目标网页需要先登录  http.get() 还需要附上cookie  所以我用web.form来做 还有其他限制 总之就是必须用web.form
而wb.execEle(ele,"Copy")获取到的图片是单帧的
  能否实现和浏览器另存为效果一样保存gif到本地 或者最好是把整个gif读进内存然后逐帧处理

2.请问怎样从gif中逐帧获取图像 我自己摸索了一个 请指正
  1. import soImage;
  2. var img = soImage();
  3. img.load("c:\1.gif");
  4. var a = img.getNumFrames();
  5. for(i=1;a;1){
  6.         img.setFrame(i);       
  7.         img.load("c:\1.gif");
  8.         img.save("c:"+(i+1)+".gif");  //为何此处保存为jpg 会出现无效文件
  9. }
复制代码


感谢各位









3

主题

35

回帖

614

积分

培训班

积分
614
发表于 2018-7-2 21:23:38 | 显示全部楼层
你确定你这个页面在webform里能正常显示?..

7

主题

21

回帖

218

积分

二级会员

积分
218
 楼主| 发表于 2018-7-3 09:37:42 | 显示全部楼层
nlysh007 发表于 2018-7-2 21:23
你确定你这个页面在webform里能正常显示?..

我要做的目标页面能打开  我没附上去
你是说测试例子的不能打开?

7

主题

21

回帖

218

积分

二级会员

积分
218
 楼主| 发表于 2018-7-3 10:15:01 | 显示全部楼层
修改了一下代码  现在能捕获gif元素了
  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="test";right=1108;bottom=716)
  4. mainForm.add(
  5. lblwb={cls="static";text="static";left=16;top=8;right=976;bottom=616;transparent=1;z=1}
  6. )
  7. /*}}*/
  8. import web.form;
  9. var wb = web.form( mainForm.lblwb,,);
  10. wb.noScriptErr=true;
  11. mainForm.show();
  12. wb.go("https://my.oschina.net/iyinghui/blog/1601564");
  13. wb.wait();
  14. var ele = wb.queryEles(src="@.gif";tagName="img");
  15. win.msgbox(ele.src);
  16. win.loopMessage();
复制代码

10

主题

73

回帖

530

积分

三级会员

积分
530
发表于 2018-7-3 11:23:35 | 显示全部楼层
  1. mainForm.button.oncommand = function(id,event){
  2. //登陆
  3.         //mainForm.msgbox( mainForm.button.text );
  4.         wb.addHeaders = "User-Agent:"+iPone6
  5.         wb.go("https://plogin.m.jd.com/user/login.action?appid=100")
  6.         wb.wait()
  7.         var eles=wb.getEle("imgCode")
  8.         if (eles){
  9.            wb.execEle(eles,"Copy")
  10.                    mainForm.picturebox.setImage( win.clip.readBitmap() )
  11.         }//将验证码拷贝到控件中   

  12.         mainForm.edit.disabled=false
  13. }
复制代码

7

主题

21

回帖

218

积分

二级会员

积分
218
 楼主| 发表于 2018-7-3 11:29:47 | 显示全部楼层
ls的 wb.execEle(eles,"Copy")只能保存获取单帧图片

我想到用wb调用js
因为wb是ie内核不支持download属性
所以用 document.execCommand("SaveAs",false,"1.gif");
结果弹出保存对话框
又没办法不弹出保存对话框直接保存
又行不通

7

主题

21

回帖

218

积分

二级会员

积分
218
 楼主| 发表于 2018-7-3 13:54:28 | 显示全部楼层
下载gif的问题解决  因为看到坛主说的这句
“inet.http 本来就跟 web.form 是共享会话的,这两个东西可以一起使用。你可以先用inet.http检测HTTP头。”
尴尬 因为其他语言不共享就默认不能用

问题2是 gif切割问题 提问时已经自己摸索了一个 请问有没有更好的方法

7

主题

21

回帖

218

积分

二级会员

积分
218
 楼主| 发表于 2018-7-3 15:47:30 | 显示全部楼层
gif切割问题 gif下载问题已解决  但不太优雅

结贴 感谢各位
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-1-13 14:31 , Processed in 0.072755 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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