如何用 js 实现抽奖页面的二次点击(关闭抽奖失败的提醒)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Vkin
V2EX    Javascript

如何用 js 实现抽奖页面的二次点击(关闭抽奖失败的提醒)?

  •  
  •   Vkin 2017-09-06 14:20:22 +08:00 3715 次点击
    这是一个创建于 2958 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有一个抽奖页面,每天能抽 100 次,用 js 实现自动点击抽奖按钮(name:go):

    var lottery = document.getElementsByName("go"); lottery[0].onclick();

    不管抽没抽中奖,点击一次之后,页面就会弹出提醒,比如 「未抽中,再抽一次」( name:close )",然后又写继续写一个点击,关闭这个提醒:

    var lotteryClose = document.getElementsByName("close"); lotteryClose[0].onclick();

    我想当然的以为:

    第一个 js 代码是 「点击抽奖按钮」、第二个 js 代码是「关闭抽奖之后页面弹出的提醒」。然后只要把这两段代码放在一起,用 setInterval ()不停的循环就行了。 

    但让人郁闷的是,这两段代码合并后,放在 chrome 的 console 里跑起来却不是我想要的功能,第二段代码似乎并没有运行,也就是说,无法关闭抽奖之后弹出的弹窗。

    当弹窗弹出后,我在 console 里再运行一次 var lottery = document.getElementsByName("close");lotteryClose[0].onclick();弹窗却能正常关闭,说明这段代码可以实现关闭按钮的点击。

    求教:如何用 js 一步完成这个两个功能? 点击自动抽奖按钮,然后关闭抽奖后弹出的提醒,然后继续循环?

    13 条回复    2017-09-07 01:20:36 +08:00
    Vkin
        1
    Vkin  
    OP
       2017-09-06 14:43:25 +08:00
    顶顶。
    ituren
        2
    ituren  
       2017-09-06 14:44:12 +08:00   1
    因为你 lottery[0].onclick();之后去做网络请求了呀
    请求回来才会弹出提示让你关闭
    懒人做法 : var lotteryClose = document.getElementsByName("close"); lotteryClose[0].onclick(); 这段加上 timeout
    Vkin
        3
    Vkin  
    OP
       2017-09-06 15:24:19 +08:00
    @ituren 加了 settimeout 就可以了。有没有办法做个判断呀,当这个窗弹出时,自动调用关闭代码? 原谅我刚接触 js 一天。
    invoke
        4
    invoke  
       2017-09-06 16:07:14 +08:00   1
    不是太理解。既然你有网络请求那么就把关闭弹窗的函数放到网络请求的返回执行里面不就好了吗?
    Vkin
        5
    Vkin  
    OP
       2017-09-06 16:18:55 +08:00
    @invoke 哪里不太理解? 放到网络请求的返回执行?能否具体点呀?,我对 js 是小白的小白。。
    ituren
        6
    ituren  
       2017-09-06 16:22:28 +08:00   1
    看一下网站的具体处理逻辑,如果关闭按钮只是把弹出框隐藏掉的话就不用管它了
    lottery[0].onclick(); * 100 就可以了
    autoxbc
        7
    autoxbc  
       2017-09-06 16:57:14 +08:00   1
    js 是事件驱动的,基本思路是把所有的操作都和事件关联起来
    比如点击关闭按钮的代码,应该挂在按钮出现的事件上

    怎么判断按钮出现,可以用突变观察者
    http://Javascript.ruanyifeng.com/dom/mutationobserver.html
    https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver

    如果觉得观察者比较复杂,可以用事件监听
    http://Javascript.ruanyifeng.com/dom/event.html

    一个元素出现,一般会伴随节点插入事件 DOMNodeInserted
    如果是修改现有元素,会伴随属性修改事件 DOMAttrModified

    如果不想深入学习,那就用上面的延时吧,不过延时是不可靠的
    zgx030030
        8
    zgx030030  
       2017-09-06 17:07:52 +08:00   1
    selenium 自动化。。。
    wxsm
        9
    wxsm  
       2017-09-06 21:56:17 +08:00
    为什么你要关闭这个提醒。它应该并不妨碍你继续执行 lottery[0].onclick(),有可能只是“看起来妨碍了”而已
    Vkin
        10
    Vkin  
    OP
       2017-09-06 22:10:39 +08:00
    @wxsm 不清楚影不影响,但是不及时关闭,会一直弹弹弹,然后到时候也是一样要关闭。。。。。
    Chemist
        11
    Chemist  
       2017-09-06 22:35:51 +08:00
    直接用将弹窗的 CSS display:none !important;
    popok
        12
    popok  
       2017-09-06 22:48:23 +08:00
    如果请求简单,直接抓包,发请求包
    如果复杂,就继续模拟点击,那个弹窗可能只是一个遮挡而已,不影响你执行点击的事件。

    如果那个弹窗确实能限制你点击抽奖,那就照 7 楼,监听事件

    实在不行,只能延时了。
    codermagefox
        13
    codermagefox  
       2017-09-07 01:20:36 +08:00 via iPhone
    楼主,这就是你开始学习 js 异步的机会啊!或者用 se 也行,se 是有内置的等候方法的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5860 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:22 PVG 11:22 LAX 20:22 JFK 23:22
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86