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-1403, Jelsoft Enterprises Ltd.