有些朋友说到可以试一下用idhttp
但是使用IdHTTP1.Post 无法在论坛发帖页面中用postList.Add('message=123456');赋值(postList为Tstringlist)
之后还是用回webbrowser小妹已经将登录和发帖弄好了
但是上传附件好像需要给attachbody里的attach_1赋值手动赋值前
<TR>
<TH><INPUT id=attach_2 type=file name=attach[] unselectable="on"> <SPAN id=localfile_2></SPAN><INPUT value=2 type=hidden name=localid[]> </TH>
<TD><INPUT size=25 name=attachdesc[]></TD></TR>手动赋值后
<TR>
<TH><INPUT style="DISPLAY: none" id=attach_1 value=C:\fakepath\Unit1.pas type=file name=attach[] unselectable="on"> <SPAN id=localfile_1><A onclick=delAttach (1) href="http://failforum.net/forum/post.php?action=edit&amp;fid=10&amp;tid=1163267&amp;pid=11653796&amp;page=1&amp;extra=page=1###delAttach" > [删除]</A> <A title=点击这里将本附件插入帖子内容中当前光标的位置onclick="insertAttachtext(1);return false;" href="http://failforum.net/forum/ post.php?action=edit& amp;amp;fid=10&amp;tid=1163267&amp;pid=11653796&amp;page=1& amp;amp;extra=page=1###insertAttach">[插入]</A> <SPAN class=smalltxt>[1 ]</SPAN> Unit1.pas</SPAN><INPUT value=1 type=hidden name=localid[]> </TH>
<TD><INPUT size=25 name=attachdesc[]></TD></TR>问题是使用
WebBrowser1.OleObject.document.getElementByID('attach_1').value := 'c:\123.txt';
给attach_1赋值根本没有反应
请各位朋友指点下。谢谢!
代码文件:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SHDocVw, StdCtrls, OleCtrls;type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Memo1: TMemo;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  WebBrowser1: TWebBrowser;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);//到论坛首页
begin
      WebBrowser1.Navigate('http://failforum.net/forum/index.php')
end;procedure TForm1.Button2Click(Sender: TObject);//登录论坛
begin
      WebBrowser1.OleObject.document.all.item('username').value := 'csdn';
      WebBrowser1.OleObject.document.all.item('password').value := 'csdn';
      WebBrowser1.OleObject.document.getElementByID('userlogin').click;
end;procedure TForm1.Button3Click(Sender: TObject);//到编辑帖子页面
begin
      WebBrowser1.Navigate('http://failforum.net/forum/post.php?action=edit&fid=10&tid=1163267&pid=11653796&page=1&extra=page%3D1');
end;procedure TForm1.Button4Click(Sender: TObject);//编辑帖子并提交
begin
      WebBrowser1.OleObject.document.getElementByID('bbcodemode').click;
      WebBrowser1.OleObject.document.all.item('message').value := '+1 need explaination..........';
      WebBrowser1.OleObject.document.getElementByID('postsubmit').click;
end;procedure TForm1.Button5Click(Sender: TObject);//调用addAttach() 函数
begin
      WebBrowser1.OleObject.Document.parentWindow.execScript('addAttach()', 'JavaScript');
end;procedure TForm1.FormCreate(Sender: TObject);//禁止报错
begin
      WebBrowser1.Silent := True;
end;procedure TForm1.Button6Click(Sender: TObject);//返回attachbody的html code
begin
      Memo1.Lines.Text := WebBrowser1.OleObject.document.getElementByID('attachbody').innerhtml;
end;procedure TForm1.Button7Click(Sender: TObject);//返回整个html code
begin
      Memo1.Lines.Text := (WebBrowser1.OleObject.document.body.outerHTML);
end;end.窗体文件:
object Form1: TForm1
  Left = 305
  Top = 331
  Width = 1142
  Height = 656
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object WebBrowser1: TWebBrowser
    Left = 8
    Top = 8
    Width = 1113
    Height = 417
    TabOrder = 0
    ControlData = {
      4C00000008730000192B00000000000000000000000000000000000000000000
      000000004C000000000000000000000001000000E0D057007335CF11AE690800
      2B2E126208000000000000004C0000000114020000000000C000000000000046
      8000000000000000000000000000000000000000000000000000000000000000
      00000000000000000100000000000000000000000000000000000000}
  end
  object Button1: TButton
    Left = 8
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 1
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 96
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 2
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 184
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 3
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 272
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button4'
    TabOrder = 4
    OnClick = Button4Click
  end
  object Button5: TButton
    Left = 360
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button5'
    TabOrder = 5
    OnClick = Button5Click
  end
  object Memo1: TMemo
    Left = 8
    Top = 440
    Width = 1113
    Height = 129
    ImeName = '中文 (繁体) - 美式键盘'
    Lines.Strings = (
      'Memo1')
    TabOrder = 6
  end
  object Button6: TButton
    Left = 448
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button6'
    TabOrder = 7
    OnClick = Button6Click
  end
  object Button7: TButton
    Left = 536
    Top = 584
    Width = 75
    Height = 25
    Caption = 'Button7'
    TabOrder = 8
    OnClick = Button7Click
  end
end

解决方案 »

  1. 控制WebBrowser相当于控制IE,文件上传涉及到浏览器的安全问题
    如果支持对input file赋值,那么用户的安全将受到威胁据我所知有三种解决方案:
    1、直接走http协议,放弃使用WebBrowser
    2、模拟鼠标键盘,操作文件对话框(得考虑IE不同的版本)
    3、设置FormToMultipartPostData,参考:http://www.codeproject.com/KB/aspnet/set-webbrowser-file-input.aspx更多信息搜索:“WebBrowser input file setting”
      

  2. .
    .
    .
      postList := TStringList.Create;
    .
    .
    .
      postList.Add('parseurloff=1');
      postList.Add('smileyoff=1');
      postList.Add('bbcodeoff=1');
      postList.Add('usesig=1');
      postList.Add('emailnotify=1');
      postList.Add('bbcodemode=Discuz! 代码模式');
      postList.Add('subject=thank you for sharing');
      postList.Add('message=thank you for sharing');
      postList.add('replysubmit=发表帖子');
      s2 := IdHTTP1.Post(LoginUrl2,postList);如果直接走http协议
    绿色那行根本无法为message赋值
    有些网友说过那个message是属于textarea
    不可以用postList.add直接赋值
    有朋友知道解决方法吗?
      

  3. 控制WebBrowser相当于控制IE,文件上传涉及到浏览器的安全问题
    如果支持对input file赋值,那么用户的安全将受到威胁据我所知有三种解决方案:
    1、直接走http协议,放弃使用WebBrowser
    2、模拟鼠标键盘,操作文件对话框(得考虑IE不同的版本)
    3、设置FormToMultipartPostData,参考:http://www.codeproject.com/KB/aspnet/set-webbrowser-file-input.aspx更多信息搜索:“WebBrowser input file setting”
      

  4. 放弃使用WebBrowser
    模拟键盘操作不稳定,而且在IE8里面已经被禁用了
      

类似问题 »