标题:请高手帮忙解决VFP 使用webbrower 自动填表并提交的问题
只看楼主
yangmz
Rank: 2
等 级:论坛游民
帖 子:94
专家分:20
注 册:2013-4-2
结帖率:54.17%
已结贴  问题点数:20 回复次数:25 
请高手帮忙解决VFP 使用webbrower 自动填表并提交的问题
刚学习用VFp webbrower 控件编程,以下是一段JSP代码:

<form action="change_w2.jsp?i=22024738&amp;tkn=LAcGKVGSIaQy7SDZP8I4-NwYwoCyTZr4iW:1loaHMXu3Y" method="post">
洗练石:<input name="count" size="15" type="text"/>
<input type="submit" value="确定" />
</form>

我的想法是:为的文本框赋值,并提交按钮。
我是这样做的:
文本框赋值:thisform.web1.document.all("count").SetAttribute("value","2")   *这句没有问题行运行,赋值2给文本框
提交按钮:我试图通过 thisform.web1.document.all(i).type 查找到类型为submit的数组为11,然后用以下方法提交:
  用thisform.web1.document.all(11).click()    *不行,死机
  用thisform.web1.document.all(11).InvokeMember("click")  *提示未的错误

提交按钮不知道如何写了,请高手帮忙解决一下

[此贴子已经被作者于2021-8-19 11:40编辑过]

搜索更多相关主题的帖子: document type thisform 提交 VFP 
2021-08-19 11:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
给个网址才好测试
2021-08-19 11:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
试试:
程序代码:
cUrl = "http://game./mergecyhc5/treasure/change_w2.jsp?i=20347215&tkn=oMGidmQbaxEvkugMzELRo1h1TMNzYceBiWloaHMXu3Y"
oHttp = CREATEOBJECT("MSXML2.XMLHTTP")
oHttp.Open("POST", cUrl, 0)
oHttp.setRequestHeader("content-type", "application/x-www-form-urlencoded")
oHttp.Send("count=2")
cTxt = oHttp.ResponseText
? STREXTRACT(cTxt,"<body>","</body>")
2021-08-20 09:15
yangmz
Rank: 2
等 级:论坛游民
帖 子:94
专家分:20
注 册:2013-4-2
得分:0 
回复 3楼 吹水佬
谢谢吹水佬!这段代码能行。不知道,新建的这个对象在其它电脑上是否需要进行额外的控件注册。
另外,如果采用html_DOM方式代码运行就更好了。
2021-08-20 10:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 4楼 yangmz
windows环境应该就可以
2021-08-20 11:25
nbwww
Rank: 6Rank: 6
等 级:贵宾
威 望:10
帖 子:222
专家分:468
注 册:2021-1-9
得分:0 
回复 3楼 吹水佬


[此贴子已经被作者于2021-8-22 07:53编辑过]

2021-08-22 07:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用yangmz在2021-8-20 10:48:52的发言:

如果采用html_DOM方式代码运行就更好了。

没见有定义的提交事件过程,用html_DOM方式可能不行。
可以试试用JS代码执行form的提交方法。
执行返回的结果

程序代码:
of = CREATEOBJECT("form1")
of.show(1)

DEFINE CLASS form1 AS Form
    width = 800
    height = 500
    ADD OBJECT cmd1 as commandbutton WITH left=10,top=10,height=25,caption="test"
    ADD OBJECT wb AS Olecontrol WITH top=40,width=800,height=460,Anchor=15,Visible=.T.,OleClass="Shell.Explorer.2"

    PROCEDURE Init
        this.wb.Silent = 1
        thisform.wb.Navigate("http://game./mergecyhc5/treasure/change_w2.jsp?i=20347215&tkn=oMGidmQbaxEvkugMzELRo1h1TMNzYceBiWloaHMXu3Y")
    ENDPROC

    PROCEDURE cmd1.click
        TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 15 
            var fm=document.getElementsByTagName("form")[0];
            fm.elements[0].value=2;
            fm.submit();
        ENDTEXT
        thisform.wb.document.parentWindow.execScript(jsCode)
    ENDPROC
ENDDEFINE

2021-08-23 12:03
yangmz
Rank: 2
等 级:论坛游民
帖 子:94
专家分:20
注 册:2013-4-2
得分:0 
回复 7楼 吹水佬
吹水佬高手啊
各种方法都能实现啊
最终,既然html dom方式不行,我还是选择Createobject("MSXML2.XMLHTTP")这个方法吧

我还是比较疑惑,明明通过调试器可以访问dom内的对象,如item,一编译后,就不能识别了。
是不是VFP真的老了?

2021-08-23 21:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 8楼 yangmz
试试这样表达
fm = thisform.wb.document.getElementsByTagName("form").item(0)

fm = thisform.wb.document.getElementsByTagName("form").[0]
2021-08-23 23:35
yangmz
Rank: 2
等 级:论坛游民
帖 子:94
专家分:20
注 册:2013-4-2
得分:0 
真搞不懂下面这句为第一个表单的第一个元素赋值为200

thiform.web1.document.getElementsByTagName("form").[0].item(0).setAttribute('value',200)

我在该语句前 SUSPEND 调试器跳出,我在监视窗口中运行这句,没有问题,正确运行,值为200。但是,我取消 SUSPEND 后运行,却提示未知名的错误,点击“挂起”,在调试器的监视窗口中运行该句,又变正确了。

我感觉头晕了,这是怎么回事啊?
2021-08-24 09:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506577-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.434295 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved