PDA

View Full Version : سوال: سوال درباره نحوه مقداردهي به كنترلهاي يك فرم وب از طريق دلفي



sara66
سه شنبه 11 آبان 1389, 15:59 عصر
سلام من این تاپیک را خواندم http://barnamenevis.org/forum/showthread.php?t=118852 اما قفل بود و این تاپیک را زدم تا سوال کنم
فرم این صفحه را می خوام پر کنم و ارسال کنم : http://www.blogfa.com/Desktop/Post.aspx
فیلدها را پر می کنم اما submit نمیشه ، سورس هم همون سورسهای توی تاپیک بالایی هست.مرسی

Felony
سه شنبه 11 آبان 1389, 16: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, 16:57 عصر
مرسی اما کار نمیکنه

Felony
سه شنبه 11 آبان 1389, 17:25 عصر
اشکال از تگ کد سایت هست ، در خط سوم کدی که قرار دادم مقدار متغییر Temp باید به صورت زیر باشد ولی تگ کد اون طور نشون میده :


Temp:= 'javascript:__doPostBack('+Chr(39)+'btnSubmit'+Chr (39)+','+Chr(39)+Chr(39)+')';

یه نمونه پروژه هم ضمیمه کردم .

موفق باشید .

sara66
سه شنبه 11 آبان 1389, 17:28 عصر
پروژه کار نمیکنه شاید با سون مشکل داره

Felony
سه شنبه 11 آبان 1389, 17:32 عصر
با چی 7 مشکل داره ؟!
من خودم از 7 استفاده میکنم ، برنامه رو هم با همین ویندوز 7 و دلفی 2010 نوشتم ، رو همین ویندوز 7 هم تست کردم ... !

@ فایل پروژه که باز میشه ؟!

sara66
سه شنبه 11 آبان 1389, 17:33 عصر
فایل باز میشه اما لوگین نمیکنه

khazaie01
سه شنبه 11 آبان 1389, 17: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, 18:15 عصر
مرسی کار کرد ولی برای پست جدید زدن کار نمیکنه
برای اینکه بشه فرم مطلب جدید را ارسال کرد چکار کنم ؟

Felony
سه شنبه 11 آبان 1389, 18:23 عصر
فایل باز میشه اما لوگین نمیکنه
من چندین بار تست کردم و مشکلی نداشت .


مرسی کار کرد ولی برای پست جدید زدن کار نمیکنه
برای اینکه بشه فرم مطلب جدید را ارسال کرد چکار کنم ؟

یکم هم خودتون تلاش کنید ، همه کارهاتون که شد سوال پرسیدن و جواب آماده گرفتن !
اسم دکمه ارسال در بلاگفا btnSave هست ، نحوه کلیک کردن هم که در پست های قبلی به صورت کامل توضیح داده شد .

sara66
سه شنبه 11 آبان 1389, 18:52 عصر
مرسی اما خوب نمیشه کار نمیکنه فقط هم توی ارسال همین پست جدید بلاگفا مشکل داره

khazaie01
سه شنبه 11 آبان 1389, 22:10 عصر
از این کد استفاده کنید :


ExecuteScript((WebBrowser1.Document as IHTMLDocument2),'document.getElementById("btnSave").click();','JavaScript');

حرف دوست عزیز هم کاملا درست ، دنبال موضوع باشید نه این که فقط سوال کنید ...