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

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



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

请问我该怎么来实现这个 click 动作?
ps:移动网站的登录地址是 http://www.sd.10086.cn/eMobile/qryBalance.action?menuid=qryBalance&pageId=868875415
2728 次点击
所在节点    问与答
8 条回复
xia0chun
2016-01-14 16:11:02 +08:00
谁来帮帮我好吗?
TakanashiAzusa
2016-01-14 16:14:14 +08:00
id 相同的话后面那个 id 不起作用。而且这里不是写好了选择的方法了么,“ selectmode ( 1 )”,直接抄就好了。
xia0chun
2016-01-14 16:20:47 +08:00
@TakanashiAzusa
https://gist.github.com/anonymous/deb3e022d75ad1711e5a

这是我从别的地方抄来的模拟登录的一段代码,麻烦你看看我空着的地方该怎么写呀,原谅我对 js 一窍不通,谢谢。
TakanashiAzusa
2016-01-14 16:29:58 +08:00
form.elements['logonMode'].value=1
xia0chun
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
2016-01-14 16:52:07 +08:00
@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
2016-01-14 17:03:15 +08:00
@TakanashiAzusa 我先试试,现在有点事要出去,晚点回复您。谢谢
xia0chun
2016-01-15 21:37:18 +08:00
@lution @royzheng @xiaoding @TakanashiAzusa
问题解决了,再次表示感谢。
结贴

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX