发表回复 
用JavaScript语句获得网页输入框焦点
2008-08-15, 13 : 28
用JavaScript语句获得网页输入框焦点
看到老是有人提问如何在网页里定位输入框焦点,可能提问得不同,但大致意思应该是这样。

首先,输入框应该也可以叫做文本框,简单的例子就是百度,谷歌的搜索框,这种填入文本的地方。

[attach]181[/attach]

[attach]182[/attach]

B2之前提供了一个官方论坛弄来的方法:
代码: (全选)
SetTitleMatchMode, 2

Run,iexplore.exe google.com
Sleep 2000
ControlSetText, Edit1, javascript:document.f.q.focus();void(0);{Enter}, Internet Explorer
Send,ahkbbs{Enter}
ExitApp
不过我看不懂啥意思,没有复制下来去运行。
但是大致意思应该就是找出网页代码中获得焦点的JavaScript语句,然后在地址栏提交即可将光标移到输入框。

我自己动手试了下,可以定位,下面给出百度,谷歌以及论坛帖子底部快速回复输入框的定位方法:

百度搜索框:
代码: (全选)
JavaScript:document.f.wd.focus()
谷歌搜索框:
代码: (全选)
javascript:document.f.q.focus()
论坛帖子底部快速回复输入框:
代码: (全选)
JavaScript:postform.message.focus()


大家分别打开相关网页,然后在地址栏粘贴入上面的JavaScript语句,回车后执行。

鼠标光标将分别移入输入框~!:)


这种方法需要网友们先掌握一点JavaScript语句,然后知道如何到网页源代码里获取相关的代码。

我也不是很懂JavaScript,只是随手试了下。论坛帖子底部的快速回复框的定位代码需要参考帖子源代码以及一个

http://ahk.5d6d.com/include/javascript/post.js
这样的脚本


附件 缩略图
       
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-15, 13 : 39
 
这个问的挺多的
最好写个简明教程,指导其如何定位~
方便新手使用
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-15, 13 : 57
 
指导啥,我可没空再去深入了。我已经测试了3个页面,连论坛的那么隐蔽的都搞定了……在没有读懂JavaScript语句的基础上,根据经验猜测得到:lol
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-15, 19 : 41
我来说说吧,用百度举例
Jdocument.f.wd.focus()
下面是百度源码其中一段
... <form name=f action=/s><input type=text name=wd id=kw size=42 maxlength=100> ...
----------------------------------------------
从这往后 Jdocument.


这些输入框一般都是表单,表单是 <form 开头的标签
打开源码, 搜索 <form 就看到上面那部分
然后找尖括号中 nameid 的值, 像上面那个是 name=f ,值就是f   得到   Jdocument.f
倒这是定位了表单, 然后定位输入框
输入框是 <input 开头的, 大多表单里不止一个输入框, 所以会有好些个 input , 这样就根据前后的文本来分辨了
确定 input 后也是用它的 nameid 的值, 这里是 name=wd id=kw   都有, 所以随便用谁的值都行,现在得到 Jdocument.f.kw

然后在后面加上 .focus()  就行了

如果碰上无效, 就搜索下是否有重复的 name 或 id
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-15, 23 : 07
 
天堂 你那个 自动登录 163 邮箱的 JavaScript 不就是这个么!!
把你那个代码前 加个 j 在地址栏输入就行了 !!
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 02 : 55
 
请教helfee管理员,为何你的方法在下述网页里找不到焦点呢?

(不好意思,ahk的论坛问了那么多javascript的问题)


1.http://www.newsmth.net/


源文件:
<form id="form1" name="form1" ……
<input type="text" class="userid" name="id" ……

为啥用
用jform1.id.focus()
和jdocument.form1.id.focus()
都获取不了焦点呢? 谢谢


2.http://www.newsmth.net/bbsreg.html

form没有名字,对话框有名字,更找不到...:(
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 03 : 54
 
引用:原帖由 BLooM2 于 2008-8-15 23:07 发表 [Image: back.gif]
天堂 你那个 自动登录 163 邮箱的 JavaScript 不就是这个么!!
把你那个代码前 加个 j 在地址栏输入就行了 !!

是的,由于写入htm运行更通用,不同的浏览器,比如IE7对地址栏输入有抵制……
我博客里不是写的比较清楚了?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 13 : 27
 
引用:原帖由 sund 于 2008-8-16 02:55 发表 [Image: back.gif]
请教helfee管理员,为何你的方法在下述网页里找不到焦点呢?
水木社区首页用了框架, 不能直接定位, 要先获取框架页面
试试:
代码: (全选)
javascript:window.frames[0].form1.id.focus()
水木注册页面没有名字的, 可以用 forms 数组获取
试试:
代码: (全选)
javascript:document.forms[0].userid.focus()
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 13 : 48
 
另外, 还可以这样写, 以百度搜索为例 (写到一行上)
代码: (全选)
var f=document.createElement('form');
f.setAttribute('action','http://www.baidu.com/s');
var i=document.createElement('input');
i.setAttribute('value','ahk');
i.setAttribute('name','wd');
f.appendChild(i);
document.appendChild(f);
f.submit()
这样写的好处是完全不需要等待打开百度首页.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 13 : 57
 
好 ! :victory: 这么多函数! 可以做一个通用的 表单提交功能了!!!:victory:
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 14 : 29
 
感觉很麻烦的样子, 每个网页表单属性不一样, 控件名称不一样, 数量类型也不一样... :(
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 14 : 39
 
可以用正则表达式找到网页上的 表单,然后再自己创建一个,填好内容,最后提交,完事!!!
找了几篇文章:
http://www.autohotkey.com/forum/viewtopic.php?t=13673
http://www.autohotkey.com/forum/viewtopic.php?t=14521
http://www.autohotkey.com/forum/viewtopic.php?t=14512
http://www.autohotkey.com/forum/topic17985.html
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-16, 14 : 53
 
嗯, 对.
普通应用可以做成像一些浏览器的自动填表类似的功能:
访问网页 → 正则获取表单消息 → gui 出来填写 → 保存
以后就可以根据网页网址或网页标题调用相应的自动填表了. 当然这样的话可以考虑使用浏览器自带的...

批量提交的话可以建立一个临时网页文件, 循环替换文本框的内容, 再执行, 就可以了.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 09 : 51
 
引用:ControlSetText, Edit1, jdocument.f.q.focus();void(0);{Enter}, Internet Explorer
中的{Enter}似乎是不起作用的
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 10 : 21
 
引用:原帖由 tanglewish 于 2008-8-17 09:51 发表 [Image: back.gif]

中的{Enter}似乎是不起作用的

是的,所以我说我看不懂这啥用……
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 10 : 31
 
引用:原帖由 天堂之门 于 2008-8-17 10:21 发表 [Image: back.gif]


是的,所以我说我看不懂这啥用……
hehe,我模拟一个按键,点击“转到”
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 13 : 13
 
引用:原帖由 tanglewish 于 2008-8-17 09:51 发表 [Image: back.gif]

中的{Enter}似乎是不起作用的

SetTitleMatchMode, 2 这句你写了么?? 我用的是IE7
ControlSetText, Edit1, jdocument.f.q.focus();void(0);, Internet Explorer
你看看 ControlSetText 成功了么?难道你的标题栏里面没有 Internet Explorer ??
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 16 : 43
 
获取页面内的控件,使用document.getElementById("id")或者document.getElementsByName("name")似乎要简单些。对于浏览器页面内的操作(比如自动登录),个人觉得最好的选择还是GreaseMonkey+JavaScript(FF),Trixie+JavaSc​ript(IE),UserScript+JavaScript(Opera),真的非常强大。比如自动登录AutoHotKey爱好者论坛就只需三句JavaScrip​t代码就可以搞定:
document.getElementById("username").value = "你的用户名";
document.getElementById("password").value = "你的密码";
document.getElementsByName("loginsubmit")[0].click();

Let's do it better!
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-17, 22 : 42
 
用 formElement.submit() 相比 click() 好一点, 有时候提交按钮可以不用 name 和 id 的.
另外, 有时候文本框也可以不用 id ...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2008-08-18, 01 : 38
 
把提交地址和Input框找到!自己定义个表单,不就什么都解决了么!!! :D
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合