WebBrowser自动填充打开文件对话框

WebBrowser自动填充文件选择框

WebBrowser自动填充打开文件对话框

 

在使用WebBrowser编写自动表单填写软件的时候,不知道大家是否遇到国填写文件选择表单的情况。遇到这种情况的时候,无法直接队Html元素赋值,必须模拟手工选择的办法(是否有其它解决办法,不得而知),下面我们来说一下我的解决办法,如下:

1、先说一下正常表单的填写方式,在Delphi+WebBrowser的环境下,可采用如下代码:

1
WebBrowser . OleObject . document . all . item( 'XXX' , 0 ).value :=xxx;

2、针对于文件选择表单,我们可以先模拟一下点击,打开文件选择对话框:

1
WebBrowser . OleObject . document . all . item( 'click' , 0 ).value;

3、然后我们采用枚举子窗体的办法,找到文件输入位置,及"确定"按钮,以模拟选择文件:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//...
function EnumProc(Hwnd: THandle; LB: LongInt ): Boolean ; stdcall;
//...
function EnumProc(Hwnd: THandle; LB: LongInt ): Boolean ; stdcall;
var CName: array [ 0..255 ] of char ;
   path: string ;
   i: integer ;
begin
   GetClassName(Hwnd, CName, 255 );
   if CName = 'Edit' then
   begin
     path := extractfilepath(Application . ExeName) + '检索\' + nameStr + ' .bmp';
     for i := 1 to length(path) do
     begin
       PostMessage(Hwnd, WM_CHAR, WPAram(path[i]), 1 );
     end ;
     //次数模拟选择文件,就是将文件的位置填写到选择框内。
   end ;
   if (TName = '打开(&O)' ) or (TName = '确定' ) then
   begin
     PostMessage(Hwnd, WM_LBUTTONDOWN, 0 , 0 );
     PostMessage(Hwnd, WM_LBUTTONup, 0 , 0 );
     //此处模拟点击
   end ;
 
   Result := True ;
end ;
//...
Procedure FindWin(); //调用
var Hwnd:THandle;
begin
  hwnd := FindWindow( nil , Title);
  //Title为文件选择窗口标题
  if Hwnd <> 0 then
  begin
    EnumChildWindows(Hwnd, @EnumProc, lp);
  end ;
end ;

3、需要注意事项:

上载文件表单对话框

a、选择文件对话框的窗口标题,在不同的IE内核下是不相同的,我在Win7及Xp上测试是两种分别为"选择文   件"、"选择要加载文件"。
b、在模拟填写的时候,需要注意,在提示打开文件的时候,代码的运行是暂停的,也就是说你必须在线程中进行模拟打开。

c、在文件名输入的时候,不要用SetWindowText函数,这个函数无法实现,只能采用发送WM_CHAR消息的方式,模拟字符输入。
4、最后告诫大家,如果没有特殊的加密算法,或者其它限制,尽量直接采用Http协议来提交表单,否则有一些东西太过于麻烦。

转载于:https://www.cnblogs.com/honeynm/p/4309716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值