ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6848|回复: 7

[求助]怎样自动填写Asp网站的表单,并运行Asp得到结果

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-9-6 14:36 | 显示全部楼层 |阅读模式

根据论坛上各位DX的贴子,作一个自动填写表单,并运行某网站Asp页面得到结果,总不能成功,故请求帮助,非常感谢!

具体问题请看附件!

09vz2oRh.rar (10.14 KB, 下载次数: 149)
[此贴子已经被作者于2007-9-6 14:43:36编辑过]

TA的精华主题

TA的得分主题

发表于 2007-9-7 13:44 | 显示全部楼层

INPUT标记,几个RADIO类型的INPUT,按同一个NAME为一组,但你不要被迷惑了,仍旧当成是几个INPUT标记即可

也就是说,RADIO类型的NAME为“mod”,从文档对象的角度来看,

SET 对象=oDoc.All("mod")

或者它的直接领导上一级FORM对象引出,都是可以的

SET 对象=ofrm.elements("mod")

这两种方法,你得到的对象,都是一个同名RADIO标记的集合,而不是单个标记 ,不要搞错了 

为了证明这件事,你可以在后面适当的代码行中找个地方随便插入这几行(你自已知道该在哪里插入吧):

SET test1= ofrm.elements("Nian")
msgbox typename(test1)   '你会看到TEST1是HTMLSelectElement
SET test2=ofrm.elements("mod")
msgbox typename(test1)  ’这是DispHTMLElementCollection
msgbox test1.length    '集合的元素是2,事实上你也可以看到网页源代码,那个“MOD”有两个NAME=MOD的INPUT RADIO组成

'msgbox test(0).outerhtml '你有兴趣还可以验证一下看看它是不是这个东西

'msgbox test(1).outerhtml

所以,你要访问MOD也不算很难,先得到RADIO集合,然后令这个集合中两个中的任一个CHECKED为TRUE即可:

set xMod=ofrm.elements("mod")

xMod(0).checked=true    '选中第一个,如果要选第二个,用xMod(1).checked=true

注意不是用xMod(n).value=1来选,你设定某个项的checked为true,则其它radio自动为false,value属性达不到这个要求

 

[此贴子已经被作者于2007-9-7 13:49:33编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-9-10 09:25 | 显示全部楼层

谢谢解答,对象设置成功了。但是还有一个问题,为什么提交后得不到提交结果?应如何提交呢?请帮助!

Private Sub CommandButton1_Click()
    Dim IE As New InternetExplorer
    Dim oDoc As MSHTML.HTMLDocument
    Dim oFrm As MSHTML.HTMLFormElement
    Dim oBody As MSHTML.HTMLBody
    
    IE.Visible = True
    IE.Navigate "
http://zhycw.com/artical/bbs/bz/qimen.asp"
   
    Do Until IE.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop
 
    '自动设定相关元素的取值
    Set oDoc = IE.Document
    Set oFrm = oDoc.forms(0)
    Set oBody = oDoc.body
   
    oFrm.elements("Nian").Value = 3
    oFrm.elements("Yue").Value = 2
    oFrm.elements("Ri").Value = 2
    oFrm.elements("Shi").Value = 2
    oFrm.elements("Ju").Value = 6    '阳六局
    
    oFrm.elements("y").selectedIndex = 18
    oFrm.elements("m").selectedIndex = 1
    oFrm.elements("d").selectedIndex = 1
    oFrm.elements("h").selectedIndex = 1
    oFrm.elements("min").selectedIndex = 1
   
    Dim XMod
    Set XMod = oFrm.elements("mod")     '公历/四柱起局
    XMod(1).Checked = True  '选定四柱起局
   
    Set XMod = oFrm.elements("pai")     '转盘奇门/飞盘奇门
    XMod(1).Checked = True  '选定飞盘奇门
   
    Set XMod = oFrm.elements("run1")     '超接置闰法/拆补无闰法
    XMod(1).Checked = True  '选定拆补无闰法    
    
    oFrm.submit '程序执行到这里都正常,可以提交后没有反应,得不到结果,为什么呢?请求帮助,谢谢!
    
    Exit Sub
    IE.Quit
    Set IE = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2007-9-10 14:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

你那个SUBMIT是可以的,有两种方法,一是FORM的SUBMIT,一是用FORM中标记INPUT SUBMIT(也就是那个名字也是SUBMIT的,太混了)做

ofrm.submit                    '你的方法

ofrm.elements("submit").click  '模拟用户按下那个SUBMIT,其实是一样的,一般来说FORM.submit更有效

但是,你发现没有效,没有反应,是吧......

嗯,请在执行代码的时候,快速切到IE的网页看看,下面的提示,XP那个IE默认安全性,它不让你弹出新的窗口 -_-

事实上,请看一下你的OFRM.target,也就是网页源代码中,FORM的TARGET

msgbox ofrm.target   '<====这是字符串 "_blank",当ACTION所指的动作SUBMIB时弹出一个BLANK新窗口

要修改这个OOXX的选项,回避安全性的问题,就让它提交时刷到自已的页面好了:

ofrm.target="_self"  '<===提交时提交到ofrm所在页面而不是新页面

ofrm.submit

不过,要注意的是,重刷新本页面以后,原来相关的DOCUMENT对象都不算数了,如果还要引用这个页面上的对象,oDoc、oFrm这些对象要重新指定(就是要重新来一次SET ODOC=IE.document,SET OFRM=...)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-9-10 15:12 | 显示全部楼层

我已经搞定了,不过不是采用你的方法,我只是把那个网页存到本地硬盘上,再调用就没有问题了,当然,修改了一下调用Asp的路径。

你的办法我也会试试,非常感谢你的回复!

TA的精华主题

TA的得分主题

发表于 2007-9-10 15:25 | 显示全部楼层

向高手学习!

不过为什么我运行附件时,

在 Set oDoc = IE.Document 这一句报错呢:[编译错误:不支持的对象库功能]

TA的精华主题

TA的得分主题

发表于 2007-9-10 16:44 | 显示全部楼层

网页存到本地,安全特性是本地网页(默认中低),而在INTERNET的安全特性默认是中(也可能是你自已定义的),一般都不允许代码弹出窗口,防止广告、病毒代码,但用户的手工动作可能级别高一些(认为是主动有意识的动作),这些设定可以在工具-INTERNET选项-安全上查到

————————————————————————————

7楼的问题我不是清楚,以前没见过,可能你的IE引用或MSHTML引用出了问题(楼主那个附近做了这两个对象引用),试一下把这句

Dim oDoc As MSHTML.HTMLDocument

Dim oFrm As MSHTML.HTMLFormElement

Dim oBody As MSHTML.HTMLBody

改成这个试试,这样就绕过了MSHTML的引用:

Dim oDoc

Dim oFrm

Dim oBody

如果还不行的话,可能要用CREATEOBJECT IE了(先看看你的IE是什么版本,什么时候装的)

TA的精华主题

TA的得分主题

发表于 2007-9-11 09:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用hiyou在2007-9-10 14:56:27的发言:
QUOTE:
.........
但是,你发现没有效,没有反应,是吧......
嗯,请在执行代码的时候,快速切到IE的网页看看,下面的提示,XP那个IE默认安全性,它不让你弹出新的窗口 -_-
事实上,请看一下你的OFRM.target,也就是网页源代码中,FORM的TARGET
msgbox ofrm.target   '<====这是字符串 "_blank",当ACTION所指的动作SUBMIB时弹出一个BLANK新窗口
要修改这个OOXX的选项,回避安全性的问题,就让它提交时刷到自已的页面好了:
ofrm.target="_self"  '<===提交时提交到ofrm所在页面而不是新页面
........

水平非常高,文采也非常好。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-17 14:04 , Processed in 0.049784 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表