با سلام من در روی برنامه چندین text box دارم که توسط کاربر پر میشه و صفحه وبی که با webbroser داخل برنامه باز کردم می خوام با زدن یک باتن اطلاعات از تکست باکس ها در داخل فیلد های فرم وارد بشن با چه کدی می تونم این کار رو بکنم
با سلام من در روی برنامه چندین text box دارم که توسط کاربر پر میشه و صفحه وبی که با webbroser داخل برنامه باز کردم می خوام با زدن یک باتن اطلاعات از تکست باکس ها در داخل فیلد های فرم وارد بشن با چه کدی می تونم این کار رو بکنم
دوست عزیز ، شما باید از یک dataadaptor , یک data connection استفاده کنی . و از یک عمل Insert با چند پارامتر استفاده کنی . در این زمینه فصل 16 کتاب مهدی هاشمیان رو بخونی رات میندازه . تو این فرومم راجع بهشون search کنی مطالب زیادی هست .
ممنون از توجه شما اما شاید منظورم رو درست نرسوندم فصل شانزده کتاب آقای هاشمیان در مورد بانک های اطلاعاتی هست ولی من منظورم یه کار ساده بود بدون نیاز به مبحث بانک اطلاعاتی مثل کاری که این نرم افزار های ارسال نظر وبلاگ ها می کنند یعنی شما تعدادی تکست باکس داری که نرم افزار محتویات اونارو داخل فیلد های موجود در اون صفحه وارد می کنه
دونستن این مطلب خیلی خوبه
من یه مدت دوست داشتم بدونم چطور اینکار رو می کنن ولی وقت نکردم برم دنبالش
میشه گفت ساخت یه رباط
میشه باهاش کرک کرد یا ...
فکر کنم مثال واضحه موردی بود بگین توضیح داده بشه...
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 : پنج شنبه 11 فروردین 1390 در 21:46 عصر
اساتید بلاخره کسی نمی خواد در مورد این رباتی که می تونه یه فرم ثبت نام رو پر کنه توضیح بده دوستان هر کس اطلاعاتی داره لطفا توضیح بده ممنون
دوست من آقای 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;
این ترفند ، ترفند اختراعی خودم بود
حله؟
البته اون 22 طول رشته id="info_name" value=" هستش (یادم رفت بگم)
این کد رو در کجا باید قرار بدم تا درست کار کنه منظور در رویداد کلیک یک باتن یا در رویداد های مربوط به webbroser ?
خب دوست من می تونی اونو تو یک باتن بزاری یا این که مثل من اونو تو یک BackGroundWorker بزاری واسه اینکه برنامه ات سریع تر به نظر بیاد.
کد شما قبلی رو به کار بردم کار کرد با کمی تغییر البته متن تکست اصلی رو تغییر نمیده id فیلد رو هم درست میدم<textarea class="textarea" name="cmtbody" id="cmtbody" onkeypress="return farsikey(this,event)" onkeydown="changelang(this);" onfocus="showhumanimg();"></textarea></td>
من از کدی که دوستمون دادند استفاده کردم سه تا از فیلدا رو پر کرد اما فیلد چهارم پر نشد این کدی هست که من استفاده کردم
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);
عکس برنامه بعد از اجرا
asas.jpg
من به فرموده شده از این کد در قسمت آخر استفاده کردم اما باز هم کادر متن خالی ماند
webBrowser1.Document.GetElementById("cmtbody").Inn erText="ok";
قصد اسپم ندارم مدیران بخش به بزرگی خودشون ببخشند مشکل این کد چیه چرا کادر مربوط به متن نظر پر نمیشه بقیه کادرها پر میشن الا آخری
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").Inn erText =textBox4.Text;
}
webBrowser1.DocumentText = "<html><head></head><body><textarea id='txt1'></textarea></body></html>";
webBrowser1.Document.GetElementById("txt1").InnerT ext = "wwwwwwwwwwwww";
این واصه من جواب داد شاید برا شما Name=cmtbody نیست ... یه break point بزار ببین اصلا اون خط اجرا میشه ؟؟؟ شاید اصلا وارد بلاک If نمیشه ...
در ضمن وقتی که فقط 4 تا کنترل رو میخوای مقدار بدی دیگه نیازی به حلقه نیست ... id هاشونو که داری فقط کافیه با getelementbyid کنی و مقدارشونو ست کنی ...
بله اون خط اجرا میشه این هم مربوط به بلاگفا هستش اینم کد صفحه هستش که از توش id رو برمی دارم
class="textarea" name="cmtbody" id="cmtbody" onkeypress="return farsikey(this,event)" onkeydown="changelang(this);" onfocus="showhumanimg();">
نمی دونم چرا مقدار نمیده به این تکست آریا
آدرس صفحرو بده خودم یه نگاهی بندازم ...
اینم آدرس صفحه خدمت شما
http://www.jeyjey.blogfa.com/comment...timezone=12600
مشکلی نداره این درست ست میشه ...
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementById("txtwriter").I nnerText = "me";
webBrowser1.Document.GetElementById("txtemail").In nerText = "me@you.com";
webBrowser1.Document.GetElementById("txturl").Inne rText = "www.me.com";
webBrowser1.Document.GetElementById("cmtbody").Inn erText = "mememem";
}
بله درست شد دستت درد نکنه مشکلش چی بود؟ و یه سوال این کد امنیتی زمانی لود میشه که در تکست آخری دوبار کلیک بشه چطوری می تونم کاری کنم که این دو بار کلیک هم اتوماتیک انجام بشه تو وب گشتم برای vb6گفتن اما برا C# نه راستی داداش گلم منم تبریزم برام افتخاری بود باهات آشنا شدم
مشکلش اینجا بود که شما GetElementsByTagName("input") در حالی که این آخری TextArea هست نه input ...
webBrowser1.Document.GetElementById("cmtbody").Foc us();
با تشکر کارت خیلی درسته فقط تنها مشکلی که الان دارم کلیک روی این دکمه submint هست یعنی وقتی کاربر کد امنیتی رو وارد کرد با کلیک روی باتن روی اون ثبت نظر کلیک بشه مثال هایی که تو سایت هست در مورد vb6 هستند وروی سی شارپ کار نکرد در کتاب آقای هاشمی هم چیزی نبود البته من خواستم با focus انجام بدم نشد ممکنه در این مورد هم راهنمایی کنید یعنی چطوری بعد از دادن کد امنیتی با زدن باتن روی اون دکمه کلیک بشه؟
میشه یه توضیح کوچک بدی ببینید در این کد یوزر نیم و پسوزد هست که در ثبت نظر نیاز نیست و action که اونجا هست در سورس صفحه موجود نیست فکر کنم این برای لاگین شدن هست در حالی که من برای ثبت نظر منظورمه
یوزر نیم و پسوزد ماله فیلدهای اون سایته .. شما به جای اونا فیلد های خودتو یزار .... action هم ماله فرم خودتو بزار ...
درست حالا به طبع می خواهیم برای وبلاگ های زیادی نظر بفرستیم چطور میشه این اکشن و ایدی فرم رو که در هر وبلاگی متفاوته پیدا کرد؟
من کد شما رو استفاده کردم چهارتا ارر داد
HtmlElement loginform = webBrowser1.Document.GetElementById("username").Pa rent.Parent;
string formID = loginform.GetAttribute("frmC");
string url = loginform.GetAttribute("Default.aspx?blogid=jeyjey &postid=98&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);
اینم ارر ها
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
اساتید ایراد این کد چیه چرا این خطاها رو داده؟
از توی خود فرم هر بار که لود میشه ...
کد HTML:<form onsubmit="return IsValidForm();" id="frmC" action="Default.aspx?blogid=jeyjey&postid=98&timezone=12600" method="post" name="frmC">
WebClientThe type or namespace name 'WebClient' could not be found
using System.Net;
NameValueCollection
using System.Collections.Specialized;
من کد رو به این صورت قرار دادم یک خطای استثنا گرفت
HtmlElement loginform = webBrowser1.Document.GetElementById("frmCmt").Pare nt.Parent;
string formID = loginform.GetAttribute("frmC");
string url = loginform.GetAttribute("Default.aspx?blogid=jeyjey &postid=98&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);
asas.jpg
و سوال دوم این هست که اون اکشن و ایدی رو با چه کدی میشه استخراج کرد ممنون
همینجوری که نمیشه کد رو 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);
سلام من میخوام یه کد بنویسم که یه فرم توی سایت تامین اجتماعی رو از دیتابیس خودم به طور اتوماتیک پر کنه کسی میتونه راهنماییم کنه
لطفاً از پرسیدن سوال در خصوصی خودداری کنید.
قبل از ایجاد تاپیک، حتماً قوانین سایت را مطالعه فرمایید.
قوانین پرسش های دانشجویی
برای درست وارد شدن کد در قالب C# سایت، ابتدا کد رو درون Notepad.exe کپی سپس از اونجا به سایت در قالب C# منتفل کنید
نرم افزار code manager دستیار برنامه نویسان جهت نگهداری کد ها