View Full Version : سوال: سوال درباره نحوه مقداردهي به كنترلهاي يك فرم وب از طريق دلفي
  
sara66
سه شنبه 11 آبان 1389, 16:59 عصر
سلام من این تاپیک را خواندم http://barnamenevis.org/forum/showthread.php?t=118852 اما قفل بود و این تاپیک را زدم تا سوال کنم 
فرم این صفحه را می خوام پر کنم و ارسال کنم : http://www.blogfa.com/Desktop/Post.aspx
فیلدها را پر می کنم اما submit نمیشه ، سورس هم همون سورسهای توی تاپیک بالایی هست.مرسی
Felony
سه شنبه 11 آبان 1389, 17:37 عصر
من قبلا با یک سایت دیگه همچین مشکلی رو داشتم و با هزار بدبختی با تحلیل کدهای خود صفحه وب این راه رو براش پیدا کردم :
var
  Temp: String;
begin
  WebFormSetFieldValue((WebBrowser1.Document as IHTMLDocument2), 0, 'UserName', 'Weblog UserName');
  WebFormSetFieldValue((WebBrowser1.Document as IHTMLDocument2), 0, 'Password', 'Weblog Password');
  Temp:= 'javascript:__doPostBack('+Chr(39)+'btnSubmit'+Chr (39)+','+Chr(39)+Chr(39)+')';
  WebBrowser1.Navigate(Temp);
end;
با کد بالا عمل کلیک روی کلید Submit شبیه سازی میشه ، btnSubmit نام کلید Submit تو فرم ورود به صفحه میدیرت بلاگفا هست که برای هر سایت دیگه ای رو میتونید با بررسی کد صفحه اون به دست بیارید .
توابع فراخوانی شده رو هم دوباره اینجا قرار میدم تا برای دوستانی که بعدا مراجعه میکنن مشکل ساز نشه :
Uses
  MSHTML;
function WebFormGet(const formNumber: Integer;
  const document: IHTMLDocument2): IHTMLFormElement;
var
  forms: IHTMLElementCollection;
begin
  forms := document.forms as IHTMLElementCollection;
  Result := forms.item(formNumber, '') as IHTMLFormElement;
end;
// --------------------------------------------------------------
procedure WebFormSetFieldValue(const document: IHTMLDocument2;
  const formNumber: integer;
  const fieldName, newValue: string) ;
var
  form : IHTMLFormElement;
  field: IHTMLElement;
begin
  form := WebFormGet(formNumber, document) ;
  field := form.Item(fieldName,'') as IHTMLElement;
  if field = nil then Exit;
  if field.tagName = 'INPUT' then
    (field as IHTMLInputElement).value := newValue
  else
  if field.tagName = 'SELECT' then
    (field as IHTMLSelectElement).value := newValue
  else
  if field.tagName = 'TEXTAREA' then
    (field as IHTMLTextAreaElement).value := newValue;
end;
sara66
سه شنبه 11 آبان 1389, 17:57 عصر
مرسی اما کار نمیکنه
Felony
سه شنبه 11 آبان 1389, 18:25 عصر
اشکال از تگ کد سایت هست ، در خط سوم کدی که قرار دادم مقدار متغییر Temp باید به صورت زیر باشد ولی تگ کد اون طور نشون میده :
Temp:= 'javascript:__doPostBack('+Chr(39)+'btnSubmit'+Chr (39)+','+Chr(39)+Chr(39)+')';
یه نمونه پروژه هم ضمیمه کردم .
موفق باشید .
sara66
سه شنبه 11 آبان 1389, 18:28 عصر
پروژه کار نمیکنه شاید با سون مشکل داره
Felony
سه شنبه 11 آبان 1389, 18:32 عصر
با چی 7 مشکل داره ؟!
من خودم از 7 استفاده میکنم ، برنامه رو هم با همین ویندوز 7 و دلفی 2010 نوشتم ، رو همین ویندوز 7 هم تست کردم ... !
@ فایل پروژه که باز میشه ؟!
sara66
سه شنبه 11 آبان 1389, 18:33 عصر
فایل باز میشه اما لوگین نمیکنه
khazaie01
سه شنبه 11 آبان 1389, 18:39 عصر
سلام دوستان 
 
برای اجرای اسکریپت ها از این تابع استفاده کنید :
 
function ExecuteScript(doc: IHTMLDocument2; script: string; language: string): Boolean;
var
  win: IHTMLWindow2;
  Olelanguage: Olevariant;
begin
  if doc <> nil then
  begin
    try
      win := doc.parentWindow;
      if win <> nil then
      begin
        try
          Olelanguage := language;
          win.ExecScript(script, Olelanguage);
        finally
          win := nil;
        end;
      end;
    finally
      doc := nil;
    end;
  end;
end;
 
 
که برای Submit کردن در صفحه لاگین بلاگفا ، باید تابع بالا را به این شکل فراخوانی کنید :
   ExecuteScript((WebBrowser1.Document as IHTMLDocument2),'__doPostBack("btnSubmit","")','JavaScript')
sara66
سه شنبه 11 آبان 1389, 19:15 عصر
مرسی کار کرد ولی برای پست جدید زدن کار نمیکنه 
برای اینکه بشه فرم مطلب جدید را ارسال کرد چکار کنم ؟
Felony
سه شنبه 11 آبان 1389, 19:23 عصر
فایل باز میشه اما لوگین نمیکنه
من چندین بار تست کردم و مشکلی نداشت .
مرسی کار کرد ولی برای پست جدید زدن کار نمیکنه 
برای اینکه بشه فرم مطلب جدید را ارسال کرد چکار کنم ؟
یکم هم خودتون تلاش کنید ، همه کارهاتون که شد سوال پرسیدن و جواب آماده گرفتن !
اسم دکمه ارسال در بلاگفا btnSave هست ، نحوه کلیک کردن هم که در پست های قبلی به صورت کامل توضیح داده شد .
sara66
سه شنبه 11 آبان 1389, 19:52 عصر
مرسی اما خوب نمیشه کار نمیکنه فقط هم توی ارسال همین پست جدید بلاگفا مشکل داره
khazaie01
سه شنبه 11 آبان 1389, 23:10 عصر
از این کد استفاده کنید : 
 
 
ExecuteScript((WebBrowser1.Document as IHTMLDocument2),'document.getElementById("btnSave").click();','JavaScript');
 
حرف دوست عزیز هم کاملا درست ، دنبال موضوع باشید نه این که فقط سوال کنید ...
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.