V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xia0chun
V2EX  ›  问与答

书接上回 https://www.v2ex.com/t/248687 ,决定采用 phantomjs 来获取余额

  •  
  •   xia0chun · 2016-01-14 15:54:06 +08:00 · 2729 次点击
    这是一个创建于 3236 天前的主题,其中的信息可能已经有所发展或是发生改变。
    书接上回,最终决定从 Web 接口来查询话费余额,貌似移动网站采用了“中央认证服务”(自己给起的名字,原谅我读书少)的方式来实现用户登录,抓了很多次包也没有能够模拟成功,最后迫不得已决定采用 phantomjs 这个大杀器,无奈还是个人水平太低了,现在又遇到一个问题如下



    打开登录页面的时候,“登录模式”默认值是“短信随机码”,我需要模拟发一个 click 动作来点中“服务密码”这个 radio ,但是看了一下页面源码发现这两个 radio 的 id 和 name 都是相同的,

    请问我该怎么来实现这个 click 动作?
    ps:移动网站的登录地址是 http://www.sd.10086.cn/eMobile/qryBalance.action?menuid=qryBalance&pageId=868875415
    第 1 条附言  ·  2016-01-15 21:34:45 +08:00
    搞了两天 phantomjs 也没有成功,鬼使神差地又从头分析了一遍 web 登录过程,竟然用程序模拟成功了 :)
    可能的原因是之前一直用 Chrome 的 Fiddler 插件来抓包,一直有问题,最后安装了一个独立的 Fiddler 软件抓的 IE 登录过程,最后成功了。再次感谢各位朋友的帮助 附上测试代码如下:
    8 条回复    2016-01-15 21:37:18 +08:00
    xia0chun
        1
    xia0chun  
    OP
       2016-01-14 16:11:02 +08:00 via Android
    谁来帮帮我好吗?
    TakanashiAzusa
        2
    TakanashiAzusa  
       2016-01-14 16:14:14 +08:00   ❤️ 1
    id 相同的话后面那个 id 不起作用。而且这里不是写好了选择的方法了么,“ selectmode ( 1 )”,直接抄就好了。
    xia0chun
        3
    xia0chun  
    OP
       2016-01-14 16:20:47 +08:00
    @TakanashiAzusa
    https://gist.github.com/anonymous/deb3e022d75ad1711e5a

    这是我从别的地方抄来的模拟登录的一段代码,麻烦你看看我空着的地方该怎么写呀,原谅我对 js 一窍不通,谢谢。
    TakanashiAzusa
        4
    TakanashiAzusa  
       2016-01-14 16:29:58 +08:00
    form.elements['logonMode'].value=1
    xia0chun
        5
    xia0chun  
    OP
       2016-01-14 16:41:13 +08:00
    @TakanashiAzusa 出错了:(
    提示如下:

    load started
    load finished
    TypeError: null is not an object (evaluating 'form.elements')

    undefined:3
    :9
    load started
    load finished

    能麻烦您帮我写一下这段登录的代码吗?我可以给您买杯咖啡
    TakanashiAzusa
        6
    TakanashiAzusa  
       2016-01-14 16:52:07 +08:00   ❤️ 1
    @xia0chun 我这里是模仿你前面的那几个句式写的。因为我自己并没有用过 phantomjs ,不过大概看了下,你这里的问题大概在于 form 的获取方式有问题:因为这个登录框并不是直接同页面的元素,而是 iframe 里嵌套的。所以直接用 id 是获取不到的。
    两个解法:
    1. var form =window.frames[0].document.getElementById("Form0")
    2. page.open("http://www.sd.10086.cn/portal/passiveLogon.do")

    你看着改一个。
    xia0chun
        7
    xia0chun  
    OP
       2016-01-14 17:03:15 +08:00
    @TakanashiAzusa 我先试试,现在有点事要出去,晚点回复您。谢谢
    xia0chun
        8
    xia0chun  
    OP
       2016-01-15 21:37:18 +08:00
    @lution @royzheng @xiaoding @TakanashiAzusa
    问题解决了,再次表示感谢。
    结贴
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.