FBrowserCEF3Lib浏览器开发技术交流网址

 找回密码
 立即注册
查看: 6349|回复: 6

【日常分享】纯异步填表思路

  [复制链接]

签到天数: 467 天

[LV.9]以坛为家II

79

主题

416

回帖

79万

积分

管理员

皇冠皇冠皇冠皇冠太阳太阳

积分
798316

优秀会员永久VIP会员活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老荣耀会员精华大师大富翁

发表于 2024-12-31 17:01:15 | 显示全部楼层 |阅读模式
火山源码分享
开发平台: 火山PC
使用框架: FBrowserCEF3
代码类型: 源码
界面截图: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我知道大部分人填表都是采用同步方式,如下图,一条流水线式的操作

【日常分享】纯异步填表思路

【日常分享】纯异步填表思路


这样做简单,思路也很清新,但是用多了你就会发现大部分时间你都在等待,效率不高,而且如果网页发生错误,你需要大量的返回重试或者重新等待,而且部分人用等待超时来判断失败,也并不高效,而且一旦没控制好(比如说:虽然超时但还未真正失败,又手动释放了,虽然这个目前本框架专门进行过处理,但依然不建议),还有崩溃的风险;

所以为什么我们不能换一条思路来考虑了?为什么非得放到一条流水线上了????那我们用异步的思维将每个处理看做一条流水线,每个处理的异步事件看做是流水线之前的桥梁,如果这样来思考,又该如何来操作了?
异步流程大概思路图如下:

【日常分享】纯异步填表思路

【日常分享】纯异步填表思路

该图有些步骤没画出来,其实异步的主要思路就是不要等待直接在异步事件中操作,即使异步事件中又有异步操作,也无需取等待获取,而是再跳到另一个异步事件取处理;我估计这么说和上面简图还是有人会看不懂;所以下面还是按代码讲解,这里主要用火山代码,因为火山采用动态事件,更方便处理;
1.创建浏览器

【日常分享】纯异步填表思路

【日常分享】纯异步填表思路

这里的创建浏览的部分代码,我这里只做了创建,虽然后面也有个同步类的等待,实际我这里是等待的最终结果,并没有做进一步操作,进一步操作是在浏览器的事件里面;


2.异步事件中进一步处理

【日常分享】纯异步填表思路

【日常分享】纯异步填表思路

在“载入结束”事件中,其实因为浏览器存在多框架多资源,所以这个事件可能会被多次调用,就有可能这个事件创建了,但我们需要的元素并没有创建,有的同学采用同步创建浏览器的方式在这里去停止同步等待再反馈浏览器其实并不完美;

如上这里有两个判断,第一个其实就是在判断登录框元素有没有存在,而第二个其实已经是另一个流程,是在已经登录填表后取判断某个元素而确认是否登录成功;
如果我们正好当前资源创建完毕了,元素就存在了,执行判断就会一次命中;但因为回调是异步,你如果直接在事件中等待取判读,就会卡事件照成异常(手册多事件篇有描述原因)
因此这里的代码直接操作,而是再对应的回调中取执行;

回调中代码如下,通过上面判断元素是否存在执行后,是不是存在都会返回给对应的回调,如下:

【日常分享】纯异步填表思路

【日常分享】纯异步填表思路

在代码第一个判断中,只要元素存在,就执行调表操作,然后点击按钮登录跳转;如果不存在就等待下一次回调,跳转登录成功后,就又会回到“载入结束”事件中去判断登录后会存在的元素,然后又会执行回调(其实这里已经是一个新类回调虽然代码还是一样,你也可以自己写成两个执行类),去执行执行类型为1的相关代码;

这里我再通过一个任务投递到UI线程取执行登录成功后的事,这里采用异步也是为了防止卡执行事件回调;

其实最终停止等待输出数据,也是通过浏览器事件执行操作资源过后会跳转到某资源去取返回数据后标识当前浏览器操作完成停止等待,如下代码

事件代码

事件代码


回调代码

回调代码


所以上面的整体流程涉及的事件,都是异步处理,而不是先创建等待然后在事件或者回调中去结束等待返回后再处理,虽然最终执行完后才结束等待反馈执行结果,但整个流程并不是一条线流水线,等一下执行一下,等一下再执行一下,所以整体效率将会高很多;

该帖子的描述代码,因为一些特殊性暂不放出来,只要能理解异步的思路,开拓一下大家的想法,不一定要用这个代码,这代码也不一定所有网站都适用;



评分

参与人数 1金钱 +10 贡献 +10 收起 理由
mosheng + 10 + 10 很给力!

查看全部评分

签到天数: 183 天

[LV.7]常住居民III

24

主题

201

回帖

1748

积分

中级会员LV5

皇冠星星

积分
1748
QQ
发表于 2025-1-17 15:00:52 | 显示全部楼层
意思是一切都在回调中........
QQ-6145203

签到天数: 226 天

[LV.7]常住居民III

1

主题

166

回帖

5456

积分

超级版主

皇冠皇冠皇冠太阳

积分
5456

永久VIP会员活跃会员热心会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

发表于 2024-12-31 20:54:05 | 显示全部楼层
学习一下

签到天数: 695 天

[LV.9]以坛为家II

294

主题

606

回帖

1万

积分

超级版主

皇冠皇冠皇冠太阳

积分
17933

活跃会员热心会员永久VIP会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2024-12-31 19:12:52 | 显示全部楼层
之前出的教程,英雄所见略同

签到天数: 71 天

[LV.6]常住居民II

1

主题

79

回帖

2700

积分

赞助会员

皇冠皇冠太阳太阳月亮月亮

积分
2700

永久VIP会员

发表于 2024-12-31 18:33:42 | 显示全部楼层
说的太好了,支持一下

签到天数: 695 天

[LV.9]以坛为家II

294

主题

606

回帖

1万

积分

超级版主

皇冠皇冠皇冠太阳

积分
17933

活跃会员热心会员永久VIP会员推广达人宣传达人突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2024-12-31 18:31:45 | 显示全部楼层
根据楼主的思路写的一个简单的demo


视频教程:易语言FBrowserCEF3lib实操-群控百度搜索
https://bbs.fbrowser.site/forum.php?mod=viewthread&tid=79
(出处: FBrowserCEF3Lib - 开发技术分享)


配套源码:
实操教程-百度填表 - 群控.e (1.27 MB, 下载次数: 13)


实操教程-百度填表.e (1.28 MB, 下载次数: 8)




点评

这交作业也太快了吧  发表于 2024-12-31 18:34
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们 在线手册 视频教程 赞助支持 CEF官网 易语言官网 火山开发官网
拒绝任何人以任何形式在本网站发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表本网站立场!

网址帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!

Archiver| 手机版| 小黑屋| 联系QQ:283987887 劰载中...

Powered by Discuz! X5.0 GMT+8, 2026-9-17 07:32 , Processed in 0.025998 second(s), 14 queries , Redis On.

 川公网安备51090302000262 蜀ICP备2023034329号
快速回复 返回顶部 返回列表