|
楼主 |
发表于 2017-12-14 20:18:36
|
显示全部楼层
发现一个问题,取百度首面的logo图片(图片比较大)时,第一次点击获取是成功的,再点一次,就出错了(Failed to execute "_recvData" 和 Failed to execute "send/sendData" ).
如果是hao123首页,取logo图片(图片比较小),不管点多少次都是成功的.
是否和图片的大小有关?
- import win.ui;
- /*DSG{{*/
- var winform = win.form(text="aardio form";right=1108;bottom=618)
- winform.add(
- button={cls="button";text="启动chrome";left=28;top=468;right=108;bottom=501;z=2};
- button2={cls="button";text="连接chrome";left=111;top=469;right=197;bottom=502;z=3};
- button3={cls="button";text="执行JS取返回值";left=35;top=555;right=158;bottom=588;z=4};
- button4={cls="button";text="打开指定网址";left=645;top=471;right=749;bottom=503;z=9};
- editJsStr={cls="edit";left=12;top=209;right=1088;bottom=452;ah=1;aw=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=5};
- editLog={cls="edit";left=11;top=7;right=1090;bottom=205;ah=1;aw=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1};
- editUrl={cls="edit";text="https://www.hao123.com/";left=271;top=474;right=639;bottom=500;edge=1;multiline=1;z=8};
- picturebox={cls="picturebox";left=182;top=548;right=308;bottom=594;edge=1;z=6};
- plus={cls="plus";left=325;top=552;right=442;bottom=594;border=1;z=7}
- )
- /*}}*/
- winform.show();
- import crypt.bin;
- import process;
- import console;
- import web.socket.chrome;
- var ws = web.socket.chrome();
- var wsLinked = false;
- import inet.whttp;
- import web.rest.jsonLiteClient;
- var http = web.rest.jsonLiteClient();
- winform.editLog.limit = 100000;
- winform.editJsStr.text = /*
- getBase64Image = function(){
- //var img = document.querySelector('#indexLogo > a > img');//在hao123.com上是每次点击获取都没问题
- var img = document.querySelector('#lg img');//在百度上是第一次取成功,后面再取就出错了Failed to execute "_recvData" 和 Failed to execute "send/sendData"
- img.setAttribute("crossOrigin",'Anonymous');//防跨域
- var canvas = document.createElement("canvas");
- canvas.width = img.width;
- canvas.height = img.height;
- var ctx = canvas.getContext("2d");
- ctx.drawImage(img, 0, 0,img.width,img.height);
- var dataURL = canvas.toDataURL("image/png");
- var base64Str = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
- //alert(base64Str);//此处可正常弹出
- return base64Str;//在百度上,第二次点,返回base64字符串会导致Failed to execute "_recvData" 和 Failed to execute "send/sendData"
- }
- getBase64Image()
- */
- //获取chrome安装路径
- import win.reg;
- var reg = win.reg("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe")
- var chromePath = reg.queryValue("");
- var timeHead = function(){
- return "["++tostring(time(time(),"%H:%M:%S"))++"] ");
- }
- //打开连接触发的事件
- ws.on("open",
- function(){
- winform.editLog.log(timeHead(),"已连接上chrome",'\r\n')
- wsLinked = true;
- win.delay(1000);
- //监听chrome事件(这个服务端断开事件通知是自动就能接收的)
- ws.on("Inspector.detached",function(param){
- winform.editLog.log(timeHead(),"chrome已主动断开连接,原因:"++param.reason,'\r\n');
- })
- }
- )
- ws.on("close",function(){
- wsLinked = false;
- winform.editLog.log(timeHead(),"已关闭连接",'\r\n')
- });
- ws.on("error",function(err){
- wsLinked = false;
- winform.editLog.log(timeHead(),"出错了",err,'\r\n');
- });
- //启动Chrome
- winform.button.oncommand = function(id,event){
- var shellStr = ` https://www.baidu.com/ --disable-web-security --user-data-dir="D:\baidudata" --disk-cache-dir="D:\baiducache" `
- process.execute(chromePath," --remote-debugging-port=9333" ++ shellStr ); //.execute
- win.delay(2000);
- winform.editLog.log(timeHead(),"请连接Chrome",'\r\n');//
- }
- //连接chrome
- winform.button2.oncommand = function(id,event){
-
- var pages = http.get("http://127.0.0.1:" ++ 9333 ++ "/json");//localhost ,用127.0.0.1好点
- if(pages && #pages){
- wsPageUrl = pages[1].webSocketDebuggerUrl;
- ws.connect(wsPageUrl);
- return true;
- }
- }
- import console;
- import string.base64;
- //执行js并取返回值
- winform.button3.oncommand = function(id,event){
-
- if(!wsLinked){
- winform.editLog.log(timeHead(),"请连接Chrome",'\r\n');//
- return ;
- }
-
- var jsStr = winform.editJsStr.text;
- ws.Runtime.evaluate(
- expression = jsStr;//加载完成会返回{"result":{"type":"string","value":"错误页-猪八戒网触屏版"}}
- ).end = function(jsonObj,err){
-
- var str = web.json.stringify(jsonObj);//json对象转换为字符串
- winform.editLog.log(timeHead(),"收到应答",string.unescape(str),'\r\n');//还原转义
-
- if(jsonObj.result.value){
-
- var base64Str =jsonObj.result.value;//未解密
- //base64Str = crypt.bin.decodeBase64(base64Str);//解密方法1
- base64Str = string.base64.decode(base64Str)//解密方法2
-
- //console.log(timeHead(),"")
-
- //plus支持png
- winform.plus.setForeground(base64Str)
-
- //picturebox不支持png,用画板中转数据
- import gdip.bitmap;
- var bmp = gdip.bitmap(base64Str)//图片文件路径或数据
- winform.picturebox.setBitmap(bmp.copyHandle())//传址方式取过来
-
-
- }else {
- //console.log(timeHead(),"")
-
- }
-
-
-
- }
- }
- winform.button4.oncommand = function(id,event){
- if(!wsLinked){ winform.msgboxErr("请先ws连接","提示:");return;}
-
- //打开网页
- //winform.editLog.log(timeHead(),"发送请求",'\r\n');//,Page.navigate
- ws.Page.navigate(
- url = winform.editUrl.text;
- ).end = function(result,err){
- //winform.editLog.log(timeHead(),"收到应答",web.json.stringify(result),'\r\n')
- }
- }
- win.loopMessage();
复制代码 |
|