PDA

View Full Version : مبتدی: پر کردن اتوماتیک یک فرم اینترنتی



momomomo
چهارشنبه 10 فروردین 1390, 15:49 عصر
با سلام من در روی برنامه چندین text box دارم که توسط کاربر پر میشه و صفحه وبی که با webbroser داخل برنامه باز کردم می خوام با زدن یک باتن اطلاعات از تکست باکس ها در داخل فیلد های فرم وارد بشن با چه کدی می تونم این کار رو بکنم

amirh_karimifar
چهارشنبه 10 فروردین 1390, 18:41 عصر
دوست عزیز ، شما باید از یک dataadaptor , یک data connection استفاده کنی . و از یک عمل Insert با چند پارامتر استفاده کنی . در این زمینه فصل 16 کتاب مهدی هاشمیان رو بخونی رات میندازه . تو این فرومم راجع بهشون search کنی مطالب زیادی هست .

momomomo
چهارشنبه 10 فروردین 1390, 19:41 عصر
ممنون از توجه شما اما شاید منظورم رو درست نرسوندم فصل شانزده کتاب آقای هاشمیان در مورد بانک های اطلاعاتی هست ولی من منظورم یه کار ساده بود بدون نیاز به مبحث بانک اطلاعاتی مثل کاری که این نرم افزار های ارسال نظر وبلاگ ها می کنند یعنی شما تعدادی تکست باکس داری که نرم افزار محتویات اونارو داخل فیلد های موجود در اون صفحه وارد می کنه

arefba
چهارشنبه 10 فروردین 1390, 20:32 عصر
دونستن این مطلب خیلی خوبه
من یه مدت دوست داشتم بدونم چطور اینکار رو می کنن ولی وقت نکردم برم دنبالش
میشه گفت ساخت یه رباط
میشه باهاش کرک کرد یا ...

silverfox
چهارشنبه 10 فروردین 1390, 21:10 عصر
فکر کنم مثال واضحه موردی بود بگین توضیح داده بشه...

HtmlElementCollection pageTextElements = loginBrowser.Document.GetElementsByTagName("input");
foreach (HtmlElement element in pageTextElements)
{
if (element.Name.Equals("username"))
element.SetAttribute("value", this.UserName);
if (element.Name.Equals("password"))
element.SetAttribute("value", this.Password);
}

momomomo
چهارشنبه 10 فروردین 1390, 21:11 عصر
بله یک رباط هست فکر کنم خوب حالا چطور میشه اینکار رو کرد یعنی خود نرم افزار برامون یک فرم ثبت نام رو پر کنه با چه کد هایی؟

momomomo
چهارشنبه 10 فروردین 1390, 21:14 عصر
دوستان بلاخره کسی نمی خواد بگه چطور یه فرم ثبت نام رو میشه پر کرد و یه ربات واسه این کار ساخت

momomomo
پنج شنبه 11 فروردین 1390, 21:05 عصر
اساتید بلاخره کسی نمی خواد در مورد این رباتی که می تونه یه فرم ثبت نام رو پر کنه توضیح بده دوستان هر کس اطلاعاتی داره لطفا توضیح بده ممنون

p30home
جمعه 12 فروردین 1390, 02:56 صبح
اساتید بلاخره کسی نمی خواد در مورد این رباتی که می تونه یه فرم ثبت نام رو پر کنه توضیح بده دوستان هر کس اطلاعاتی داره لطفا توضیح بده ممنون

دوست من آقای silverfox (http://barnamenevis.org/member.php?53488-silverfox) جوابتونو کامل دادند ولی یک راه دیگر هم هست و اونم در یافت کد HTML صفحه و قرار دادن value="matne delkhah" مثلا وقتی می خوای تکس باکسی رو که به این صورت تعریف شده : <input type="text" id="info_name" value="">
رو پر کنی می تونی از این ترفند استفاده کنی :

webClient web = new webClient();
web.encoding = encoding.UTF8;
string src = web.DownloadString("http://ye adress.com");
src = src.Insert(src.IndexOf("id=\"info_name\" value=\"")+22),textBox1.Text);
webBrowser1.DocumentText = src;


این ترفند ، ترفند اختراعی خودم بود :لبخند:
حله؟

p30home
جمعه 12 فروردین 1390, 02:57 صبح
البته اون 22 طول رشته id="info_name" value=" هستش (یادم رفت بگم)

momomomo
جمعه 12 فروردین 1390, 10:40 صبح
این کد رو در کجا باید قرار بدم تا درست کار کنه منظور در رویداد کلیک یک باتن یا در رویداد های مربوط به webbroser ?

p30home
جمعه 12 فروردین 1390, 10:58 صبح
خب دوست من می تونی اونو تو یک باتن بزاری یا این که مثل من اونو تو یک BackGroundWorker بزاری واسه اینکه برنامه ات سریع تر به نظر بیاد.

momomomo
جمعه 12 فروردین 1390, 11:27 صبح
کد شما قبلی رو به کار بردم کار کرد با کمی تغییر البته متن تکست اصلی رو تغییر نمیده id فیلد رو هم درست میدم
<textarea class="textarea" name="cmtbody" id="cmtbody" onkeypress="return farsikey(this,event)" onkeydown="changelang(this);" onfocus="showhumanimg();"></textarea></td>

momomomo
جمعه 12 فروردین 1390, 14:53 عصر
من از کدی که دوستمون دادند استفاده کردم سه تا از فیلدا رو پر کرد اما فیلد چهارم پر نشد این کدی هست که من استفاده کردم

HtmlElementCollection pageTextElements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in pageTextElements)
{
if (element.Name.Equals("txtwriter"))
element.SetAttribute("Value", this.textBox1.Text);
if (element.Name.Equals("txtemail"))
element.SetAttribute("Value", this.textBox2.Text);
if (element.Name.Equals("txturl"))
element.SetAttribute("Value", this.textBox3.Text);
if (element.Name.Equals("cmtbody"))

element.SetAttribute("Value", this.textBox4.Text);
عکس برنامه بعد از اجرا
68135

exlord
جمعه 12 فروردین 1390, 15:52 عصر
من از کدی که دوستمون دادند استفاده کردم سه تا از فیلدا رو پر کرد اما فیلد چهارم پر نشد این کدی هست که من استفاده کردم

HtmlElementCollection pageTextElements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in pageTextElements)
{
if (element.Name.Equals("txtwriter"))
element.SetAttribute("Value", this.textBox1.Text);
if (element.Name.Equals("txtemail"))
element.SetAttribute("Value", this.textBox2.Text);
if (element.Name.Equals("txturl"))
element.SetAttribute("Value", this.textBox3.Text);
if (element.Name.Equals("cmtbody"))

element.SetAttribute("Value", this.textBox4.Text);
عکس برنامه بعد از اجرا
68135
این آخریسه TextArea هستش که Value نداره .... باید InnerText ست کنی ...

momomomo
جمعه 12 فروردین 1390, 17:14 عصر
من به فرموده شده از این کد در قسمت آخر استفاده کردم اما باز هم کادر متن خالی ماند

webBrowser1.Document.GetElementById("cmtbody").InnerText="ok";

momomomo
جمعه 12 فروردین 1390, 17:58 عصر
قصد اسپم ندارم مدیران بخش به بزرگی خودشون ببخشند مشکل این کد چیه چرا کادر مربوط به متن نظر پر نمیشه بقیه کادرها پر میشن الا آخری


HtmlElementCollection pageTextElements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in pageTextElements)
{
if (element.Name.Equals("txtwriter"))
element.SetAttribute("Value", this.textBox1.Text);
if (element.Name.Equals("txtemail"))
element.SetAttribute("Value", this.textBox2.Text);
if (element.Name.Equals("txturl"))
element.SetAttribute("Value", this.textBox3.Text);
if (element.Name.Equals("cmtbody"))
webBrowser1.Document.GetElementById("cmtbody").InnerText =textBox4.Text;

}

exlord
جمعه 12 فروردین 1390, 18:29 عصر
webBrowser1.DocumentText = "<html><head></head><body><textarea id='txt1'></textarea></body></html>";
webBrowser1.Document.GetElementById("txt1").InnerText = "wwwwwwwwwwwww";
این واصه من جواب داد شاید برا شما Name=cmtbody نیست ... یه break point بزار ببین اصلا اون خط اجرا میشه ؟؟؟ شاید اصلا وارد بلاک If نمیشه ...
در ضمن وقتی که فقط 4 تا کنترل رو میخوای مقدار بدی دیگه نیازی به حلقه نیست ... id هاشونو که داری فقط کافیه با getelementbyid کنی و مقدارشونو ست کنی ...

momomomo
جمعه 12 فروردین 1390, 19:13 عصر
بله اون خط اجرا میشه این هم مربوط به بلاگفا هستش اینم کد صفحه هستش که از توش id رو برمی دارم
class="textarea" name="cmtbody" id="cmtbody" onkeypress="return farsikey(this,event)" onkeydown="changelang(this);" onfocus="showhumanimg();">
نمی دونم چرا مقدار نمیده به این تکست آریا

exlord
جمعه 12 فروردین 1390, 20:34 عصر
آدرس صفحرو بده خودم یه نگاهی بندازم ...

momomomo
جمعه 12 فروردین 1390, 21:08 عصر
اینم آدرس صفحه خدمت شما
http://www.jeyjey.blogfa.com/comments/?blogid=jeyjey&postid=98&timezone=12600

exlord
جمعه 12 فروردین 1390, 21:25 عصر
مشکلی نداره این درست ست میشه ...
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementById("txtwriter").InnerText = "me";
webBrowser1.Document.GetElementById("txtemail").InnerText = "me@you.com";
webBrowser1.Document.GetElementById("txturl").InnerText = "www.me.com";
webBrowser1.Document.GetElementById("cmtbody").InnerText = "mememem";
}

momomomo
جمعه 12 فروردین 1390, 21:48 عصر
بله درست شد دستت درد نکنه مشکلش چی بود؟ و یه سوال این کد امنیتی زمانی لود میشه که در تکست آخری دوبار کلیک بشه چطوری می تونم کاری کنم که این دو بار کلیک هم اتوماتیک انجام بشه تو وب گشتم برای vb6گفتن اما برا c# نه راستی داداش گلم منم تبریزم برام افتخاری بود باهات آشنا شدم

exlord
شنبه 13 فروردین 1390, 10:35 صبح
مشکلش اینجا بود که شما GetElementsByTagName("input") در حالی که این آخری TextArea هست نه input ...
webBrowser1.Document.GetElementById("cmtbody").Focus();

momomomo
شنبه 13 فروردین 1390, 11:15 صبح
با تشکر کارت خیلی درسته فقط تنها مشکلی که الان دارم کلیک روی این دکمه submint هست یعنی وقتی کاربر کد امنیتی رو وارد کرد با کلیک روی باتن روی اون ثبت نظر کلیک بشه مثال هایی که تو سایت هست در مورد vb6 هستند وروی سی شارپ کار نکرد در کتاب آقای هاشمی هم چیزی نبود البته من خواستم با focus انجام بدم نشد ممکنه در این مورد هم راهنمایی کنید یعنی چطوری بعد از دادن کد امنیتی با زدن باتن روی اون دکمه کلیک بشه؟

exlord
شنبه 13 فروردین 1390, 12:36 عصر
قبلا مطرح شده (http://barnamenevis.org/showthread.php?280031-%DA%A9%D9%84%DB%8C%DA%A9-%D8%AE%D9%88%D8%AF%DA%A9%D8%A7%D8%B1-%D8%B1%D9%88%DB%8C-%D8%B3%D8%A7%D8%A8%D9%85%DB%8C%D8%AA-%D8%A8%D8%A7%D8%AA%D9%86&p=1235997&highlight=#post1235997)

momomomo
شنبه 13 فروردین 1390, 13:31 عصر
میشه یه توضیح کوچک بدی ببینید در این کد یوزر نیم و پسوزد هست که در ثبت نظر نیاز نیست و action که اونجا هست در سورس صفحه موجود نیست فکر کنم این برای لاگین شدن هست در حالی که من برای ثبت نظر منظورمه

exlord
شنبه 13 فروردین 1390, 13:46 عصر
یوزر نیم و پسوزد ماله فیلدهای اون سایته .. شما به جای اونا فیلد های خودتو یزار .... action هم ماله فرم خودتو بزار ...

momomomo
شنبه 13 فروردین 1390, 14:03 عصر
درست حالا به طبع می خواهیم برای وبلاگ های زیادی نظر بفرستیم چطور میشه این اکشن و ایدی فرم رو که در هر وبلاگی متفاوته پیدا کرد؟

momomomo
شنبه 13 فروردین 1390, 14:11 عصر
من کد شما رو استفاده کردم چهارتا ارر داد


HtmlElement loginform = webBrowser1.Document.GetElementById("username").Parent.Parent;

string formID = loginform.GetAttribute("frmC");
string url = loginform.GetAttribute("Default.aspx?blogid=jeyjey&amp;postid=98&amp;timezone=1260 0");
WebClient c = new WebClient();
NameValueCollection vals = new NameValueCollection();
vals.Add("data[txtwriter]", "myUsername");
vals.Add("data[txtemail]", "MyPassword");
vals.Add("data[txturl]", "MyBlog");
byte[] result = c.UploadValues(url, "POST", vals);
webBrowser1.DocumentText = Encoding.UTF8.GetString(result, 0, result.Length);

اینم ارر ها
Error 1 The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?) C:\Users\arash\Documents\Visual Studio 2008\Projects\WindowsFormsApplication6\WindowsForm sApplication6\Form1.cs 26 13 WindowsFormsApplication6
Error 2 The type or namespace name 'WebClient' could not be found (are you missing a using directive or an assembly reference?) C:\Users\arash\Documents\Visual Studio 2008\Projects\WindowsFormsApplication6\WindowsForm sApplication6\Form1.cs 26 31 WindowsFormsApplication6
Error 3 The type or namespace name 'NameValueCollection' could not be found (are you missing a using directive or an assembly reference?) C:\Users\arash\Documents\Visual Studio 2008\Projects\WindowsFormsApplication6\WindowsForm sApplication6\Form1.cs 27 13 WindowsFormsApplication6
Error 4 The type or namespace name 'NameValueCollection' could not be found (are you missing a using directive or an assembly reference?) C:\Users\arash\Documents\Visual Studio 2008\Projects\WindowsFormsApplication6\WindowsForm sApplication6\Form1.cs 27 44 WindowsFormsApplication6

momomomo
شنبه 13 فروردین 1390, 17:07 عصر
اساتید ایراد این کد چیه چرا این خطاها رو داده؟

exlord
شنبه 13 فروردین 1390, 19:03 عصر
درست حالا به طبع می خواهیم برای وبلاگ های زیادی نظر بفرستیم چطور میشه این اکشن و ایدی فرم رو که در هر وبلاگی متفاوته پیدا کرد؟
از توی خود فرم هر بار که لود میشه ...

<form onsubmit="return IsValidForm();" id="frmC" action="Default.aspx?blogid=jeyjey&amp;postid=98&amp;timezone=1260 0" method="post" name="frmC">


The type or namespace name 'WebClient' could not be found
WebClient
using System.Net;
NameValueCollection
using System.Collections.Specialized;

momomomo
شنبه 13 فروردین 1390, 19:49 عصر
من کد رو به این صورت قرار دادم یک خطای استثنا گرفت


HtmlElement loginform = webBrowser1.Document.GetElementById("frmCmt").Parent.Parent;

string formID = loginform.GetAttribute("frmC");
string url = loginform.GetAttribute("Default.aspx?blogid=jeyjey &amp;postid=98&amp;timezone=12600");
WebClient c = new WebClient();
NameValueCollection vals = new NameValueCollection();
vals.Add("data[txtwriter]", "myUsername");
vals.Add("data[txtemail]", "MyPassword");
vals.Add("data[txturl]", "MyBlog");
byte[] result = c.UploadValues(url, "POST", vals);
webBrowser1.DocumentText = Encoding.UTF8.GetString(result, 0, result.Length);



68194
و سوال دوم این هست که اون اکشن و ایدی رو با چه کدی میشه استخراج کرد ممنون

Farshid007
یک شنبه 14 فروردین 1390, 21:51 عصر
من از کدی که دوستمون دادند استفاده کردم سه تا از فیلدا رو پر کرد اما فیلد چهارم پر نشد این کدی هست که من استفاده کردم

HtmlElementCollection pageTextElements = webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement element in pageTextElements)
{
if (element.Name.Equals("txtwriter"))
element.SetAttribute("Value", this.textBox1.Text);
if (element.Name.Equals("txtemail"))
element.SetAttribute("Value", this.textBox2.Text);
if (element.Name.Equals("txturl"))
element.SetAttribute("Value", this.textBox3.Text);
if (element.Name.Equals("cmtbody"))

element.SetAttribute("Value", this.textBox4.Text);
عکس برنامه بعد از اجرا
68135


اسم اون تکست باکس cmtBody هستش :
میتونی از این کد استفاده کنی:
HtmlElement El1 = webBrowserCommend.Document.GetElementById("cmtbody");
if (null != El1)
{
El1.SetAttribute("value", "For Example:Farshid");
}

exlord
دوشنبه 15 فروردین 1390, 16:57 عصر
من کد رو به این صورت قرار دادم یک خطای استثنا گرفت


HtmlElement loginform = webBrowser1.Document.GetElementById("frmCmt").Parent.Parent;

string formID = loginform.GetAttribute("frmC");
string url = loginform.GetAttribute("Default.aspx?blogid=jeyjey &amp;postid=98&amp;timezone=12600");
WebClient c = new WebClient();
NameValueCollection vals = new NameValueCollection();
vals.Add("data[txtwriter]", "myUsername");
vals.Add("data[txtemail]", "MyPassword");
vals.Add("data[txturl]", "MyBlog");
byte[] result = c.UploadValues(url, "POST", vals);
webBrowser1.DocumentText = Encoding.UTF8.GetString(result, 0, result.Length);



68194
و سوال دوم این هست که اون اکشن و ایدی رو با چه کدی میشه استخراج کرد ممنون
همینجوری که نمیشه کد رو copy-paste کنین و استفاده کنین ... این کد ماله اون فرم بود حالا شما باید برای فرم خودتون اصلاحش کنین ... بهتره HTML هم یاد بگیرین قبل از اینکه بخواین با اون کار کنین ...
HtmlElement loginform = webBrowser1.Document.GetElementById("frmC");

string url = loginform.GetAttribute("action");
WebClient c = new WebClient();
NameValueCollection vals = new NameValueCollection();
vals.Add("txtwriter", "myUsername");
vals.Add("txtemail", "MyPassword");
vals.Add("txturl", "MyBlog");
vals.Add("cmtbody", "Mycomment");
byte[] result = c.UploadValues(url, "POST", vals);
webBrowser1.DocumentText = Encoding.UTF8.GetString(result, 0, result.Length);

SaeidSsa
یک شنبه 13 بهمن 1392, 00:14 صبح
این آخریسه TextArea هستش که Value نداره .... باید InnerText ست کنی ...

سلام تشکر تشکر استفاده کردم .. لطفا قطعه کد جاوا شو بزارید ممنون میشیم .. یه تکیه کدی (html یاجاوا )که نیاز به کامپایل نداشته باشه بازم ممنون

arrobt
دوشنبه 27 فروردین 1397, 10:51 صبح
سلام من میخوام یه کد بنویسم که یه فرم توی سایت تامین اجتماعی رو از دیتابیس خودم به طور اتوماتیک پر کنه کسی میتونه راهنماییم کنه

danialafshari
دوشنبه 27 فروردین 1397, 14:32 عصر
سلام من میخوام یه کد بنویسم که یه فرم توی سایت تامین اجتماعی رو از دیتابیس خودم به طور اتوماتیک پر کنه کسی میتونه راهنماییم کنه
با سلام
قبلاً خیلی در سایت مطرح شده لطفاً قبل از ایجاد پست، جستجو کنید
اگر از WebBrowser استفاده می کنید درباره HtmlElement تحقیق کنید، توی سایت هم هست
موفق باشید

fanosshab
دوشنبه 02 دی 1398, 12:50 عصر
بله یک رباط هست فکر کنم خوب حالا چطور میشه اینکار رو کرد یعنی خود نرم افزار برامون یک فرم ثبت نام رو پر کنه با چه کد هایی؟

من این رباط رو دارم و دارم ازش تو سایت سایپا و ایران خودرو استفاده میکنم برای خرید تماس بگیر 09164930138

fanosshab
دوشنبه 02 دی 1398, 12:52 عصر
بله یک رباط هست فکر کنم خوب حالا چطور میشه اینکار رو کرد یعنی خود نرم افزار برامون یک فرم ثبت نام رو پر کنه با چه کد هایی؟


دوستان بلاخره کسی نمی خواد بگه چطور یه فرم ثبت نام رو میشه پر کرد و یه ربات واسه این کار ساخت

من این رباط رو دارم و دارم ازش تو سایت سایپا و ایران خودرو استفاده میکنم برای خرید تماس بگیر 09164930138