Delphi与网页的交互问题!!!!!

jxqn_liu syswin 技术经理  2013-01-22 04:27:48
难道Delphi与网页的交互只能通过WebBrowser控件吗?
WebBrowser控件中加载网页不是和浏览器中不同了吗,WebBrowser不也是算一个浏览器了。
在WebBrowser打开的网页和浏览器中打开的网页完全都是两码事了。

说下事情原委吧:
这边需要将系统中的费用数据传递到税务网站中实现自己填制票据数据的功能,然后客户只要通过点击确认打印就行。
所以这里涉及到向浏览器中指定的网页填充数据的操作!


有那么大哥做过类似的功能,麻烦指点下小弟哈!
...全文
1183 24 点赞 打赏 收藏 举报
写回复
24 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
c6372830 2014-09-23
没有分数提问,你的不是我想要的~
  • 打赏
  • 举报
回复
wy610739572 2013-08-08
好像还是没有解决问题
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-30

var
  IE: Variant;
  Doc:IHTMLDocument2;
  InputEle: IHTMLInputElement;

begin
  IE := CreateOleObject('InternetExplorer.Application');
  IE.Visible := True;
  IE.Navigate('C:\Test.html');

  Doc := (IDispatch(IE.document) as IHTMLDocument2); 
  if Doc=nil then exit;
  InputEle:=(Doc.all.item('A204098',0) as IHTMLInputElement);
  InputEle.Value := 'TestText';
end;
最后实现处理
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-30
引用 19 楼 stmal 的回复:
怎么没有人提到IHTMLDocument2呢?虽然执行效率比idhttp低,但很实用。
现在就是用的IHTMLDocument2,先是通过CreateOleObject创建一个对象实现的!
  • 打赏
  • 举报
回复
fbiboss 2013-01-30
就用WEBBROWSER就好啊
  • 打赏
  • 举报
回复
stmal 2013-01-27
怎么没有人提到IHTMLDocument2呢?虽然执行效率比idhttp低,但很实用。
  • 打赏
  • 举报
回复
YshuuiNew 2013-01-25
自己写很难哦,你能自己写浏览器内核了。 你找不到需要填写数据的地方,或者是一个textbox或者是一个combbox. WebBrowser使用的是IE的内核,你看看源代码,只引用写了多少行? 自动网页填充数据也必须是在网页已经打开的情况下完成的。
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-23
引用 13 楼 zhangw198636 的回复:
你不会是搞财务软件的吧。我倒是做过自动申报地税申报的功能。实现税局申报的自动登录自动申报填数功能。不是很麻烦的。
不是 这只是一个辅助工具,省去了客户手动填单的过程
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-23
引用 12 楼 kiboisme 的回复:
不是非用WebBrowser才得到内容。可以从IE中直接获取窗口Handle,然后获取Com+ Shell.Application获取IWebBrowser接口,就可以直接操作,js执行后的结果同样能得到。
多谢!稍后试试看
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-23
引用 11 楼 foxyy8888 的回复:
function TfrmMain.GetXXXXXXXXXStatus(const xh: string; out xx, zylb, qdh, zysj, ch, hph, fz, dz, zt: string): Boolean; var PostParams :TStrings; s ,Html:string; Match :TMatch……
谢谢哥们!今天试试看
  • 打赏
  • 举报
回复
zhangw198636 2013-01-23
你不会是搞财务软件的吧。我倒是做过自动申报地税申报的功能。实现税局申报的自动登录自动申报填数功能。不是很麻烦的。
  • 打赏
  • 举报
回复
yayongm 2013-01-23
相对于其它方法,网页填写貌似是最简单最有效的方法鸟... 当然,还有就是,地税提供接口...这个,这个,还是省了吧...
  • 打赏
  • 举报
回复
蓝色光芒 2013-01-22
不是非用WebBrowser才得到内容。可以从IE中直接获取窗口Handle,然后获取Com+ Shell.Application获取IWebBrowser接口,就可以直接操作,js执行后的结果同样能得到。
  • 打赏
  • 举报
回复
OO_is_just_P 2013-01-22
function TfrmMain.GetXXXXXXXXXStatus(const xh: string; out xx, zylb, qdh, zysj, ch, hph, fz, dz, zt: string): Boolean; var PostParams :TStrings; s ,Html:string; Match :TMatch; IndyHttp :TIdHttp; IndyCookieManager :TIdCookieManager; IndyZlib: TIdCompressorZLib; begin xx :=''; zylb :=''; qdh :=''; zysj :=''; ch :=''; hph :=''; fz :=''; dz :=''; zt :=''; Randomize; Result :=True; PostParams :=TStringList.Create; IndyHttp :=TIdhttp.Create(nil); IndyCookieManager :=TIdCookieManager.Create(nil); IndyZlib :=TIdCompressorZLib.Create(nil); try try //配置参数 IndyHttp.CookieManager :=IndyCookieManager; IndyHttp.Compressor :=IndyZlib; IndyHttp.Disconnect; IndyHttp.HandleRedirects :=False; IndyHttp.AllowCookies :=True; IndyHttp.Request.CustomHeaders.Clear; IndyHttp.HTTPOptions :=[hoForceEncodeParams]; IndyHttp.Request.Accept :='text/html, application/xhtml+xml, */*'; IndyHttp.Request.AcceptEncoding :=''; IndyHttp.Request.AcceptLanguage :='zh-CN'; IndyHttp.Request.CacheControl :='no-cache'; IndyHttp.Request.Connection :='Keep-Alive'; IndyHttp.Request.UserAgent :='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'; IndyHttp.Request.Host :='XXXXXXXXXXXXXXXXXX'; IndyHttp.Request.Referer :='XXXXXXXXXXXXXXXXXXXXXXXX.jsp'; IndyHttp.Request.ContentType :='application/x-www-form-urlencoded'; PostParams.Add('number1='+xh); PostParams.Add('number2='); PostParams.Add('number3='); PostParams.Add('number4='); PostParams.Add('number5='); PostParams.Add('Submit=确定'); Html :=IndyHttp.Post('http://XXXXXXXXXXXXXXXXXX.jsp',PostParams); //sl.SaveToFile('D:\111.html'); //sl.LoadFromFile('D:\111.html'); s :=Copy(xh,1,4); s :=s + ' ' +Copy(xh,5,7); s := s+ '(?:.*\r?\n){4}.*?>(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){5} *(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){4}.*?>(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){5} *(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){3}.*?>(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){3}.*?>(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){5} *(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){4} *(.*?) *\r?\n'; s := s+ '(?:.*\r?\n){4}.*?>(.*?) *\r?\n'; Match :=TRegEx.Match(Html,s,[roMultiLine]); if Match.Success then begin xx :=Match.Groups[1].Value; zylb :=Match.Groups[2].Value; qdh :=Match.Groups[3].Value; zysj :=Match.Groups[4].Value; ch :=Match.Groups[5].Value; hph :=Match.Groups[6].Value; fz :=Match.Groups[7].Value; dz :=Match.Groups[8].Value; zt :=Match.Groups[9].Value; end; Delay(Random(2000)+1000); except Result :=False; end; finally PostParams.Free; IndyHttp.Disconnect; IndyHttp.Free; IndyCookieManager.Free; IndyZlib.Free; end; end;
  • 打赏
  • 举报
回复
beiguofengguang 2013-01-22
可以使用idhttp来处理,你下载个HttpAnalyzerStdV6抓下包,过滤出来有效的http步骤,然后模拟就好了
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-22
引用 8 楼 foxyy8888 的回复:
找个WireShark抓包。 不开WEBBROWSER 用Indy模拟,json,js什么都搞定。
请教大哥,该怎么使用那工具将数据传递到网页上呢,小弟愚昧
  • 打赏
  • 举报
回复
OO_is_just_P 2013-01-22
找个WireShark抓包。 不开WEBBROWSER 用Indy模拟,json,js什么都搞定。
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-22
引用 6 楼 cdchq 的回复:
引用 4 楼 sz_haitao 的回复:在浏览器中已经被打开的网页 必须 自动或程序操作地 刷新一下 不使用webbrowser,关键是无法得到js执行后的效果 这个没啥好办法吧,简单的js可以自己模拟出来,复杂的就不行了。
如果只是做数据传递过去,不需要其他复杂的操作,有没有可操作性呢
  • 打赏
  • 举报
回复
cdchq 2013-01-22
引用 4 楼 sz_haitao 的回复:
在浏览器中已经被打开的网页 必须 自动或程序操作地 刷新一下 不使用webbrowser,关键是无法得到js执行后的效果
这个没啥好办法吧,简单的js可以自己模拟出来,复杂的就不行了。
  • 打赏
  • 举报
回复
jxqn_liu 2013-01-22
引用 4 楼 sz_haitao 的回复:
在浏览器中已经被打开的网页 必须 自动或程序操作地 刷新一下 不使用webbrowser,关键是无法得到js执行后的效果
求大哥指点指点该如何出来,小弟现在是一头雾水了!
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Delphi
加入

4969

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2013-01-22 04:27
社区公告
暂无公告