PDA

View Full Version : نحوه فشردن کلید سرچ بدون آیدی در کد نویسی؟



Omid.R.A.Candy
جمعه 22 شهریور 1392, 23:36 عصر
من یه سایت سراغ دارم :

http://www.farsilookup.com/

که برای دکمه سرچش آدی نداره! چطوری در کدنویسیام کلیکش کنم؟


اگه میشه کدی که بتونم نتیجه سرچ رو برگردونم به یه تکس باکس رو هم بگین.ممنونم

aliagamon
شنبه 23 شهریور 1392, 00:01 صبح
با استفاده از این تابع میتونید براساس value دکمه کلیک کنید(دست نویسه ...:

Private Sub ClickbyVal(ByVal innerText As String, ByVal type As String)

For Each link As HtmlElement In WebBrowser1.Document.GetElementsByTagName(type)
If link.InnerText IsNot Nothing Then
If link.InnerText.Equals(innerText) Then
link.InvokeMember("click")
End If
End If

Next

End Sub

اولین ورودیش کلمه ی value هست و دومی هم type هست که میشه نوع تگش که تو این مورد میشه : input

Omid.R.A.Candy
شنبه 23 شهریور 1392, 00:12 صبح
با استفاده از این تابع میتونید براساس value دکمه کلیک کنید(دست نویسه ...:

Private Sub ClickbyVal(ByVal innerText As String, ByVal type As String)

For Each link As HtmlElement In WebBrowser1.Document.GetElementsByTagName(type)
If link.InnerText IsNot Nothing Then
If link.InnerText.Equals(innerText) Then
link.InvokeMember("click")
End If
End If

Next

End Sub

اولین ورودیش کلمه ی value هست و دومی هم type هست که میشه نوع تگش که تو این مورد میشه : input


خوب از این تابعی که دادین استفاده کنید برای فشردن دکمه جستجو تو این سایت:http://www.farsilookup.com/

aliagamon
شنبه 23 شهریور 1392, 00:55 صبح
راست میگین اشتباه از من بود اون تابع رو من قبلا برای کلیک روی دکمه داغ کن کلوب استفاده میکردم(که نوعش لینک بود با یه استایل )... این input هست پس باید اینطوری کلیک کنید:


For Each el As HtmlElement In WebBrowser1.Document.GetElementsByTagName("input")
If el.GetAttribute("value").Equals("جستجو") Then
el.InvokeMember("click")
End If
Next

این عمل کلیک رو انجام میده ...
درضمن سوال هاتون خیلی هاش تکراریه یه جستجو بکنین بد نیست بخدا...

Omid.R.A.Candy
شنبه 23 شهریور 1392, 02:48 صبح
خیلی جالب بود.ممنون

حالا ما برای دستکاری سایتها یا باید بر اساس آیدی بریم جلو و یا مثل کدی که بالا دادین؟
روش دیگه ای نیست؟

بطور مثال به کدی که از راست کلیک بر روی دکمه جستجو حاصل میشه توجه کنید:


<input class="button-search" type="submit" value="جستجو"></input>

واژه input در کد تکسباکس هم هست! نمیشه این عمل کلیک بر اساس واژه
class="button-search" صورت بگیره؟

aliagamon
شنبه 23 شهریور 1392, 12:39 عصر
نه دقیقا ... شما میتونید با id ، value ،اسم تگ ، اسم کلاس،و هرنوع Attribute دیگه در تگ ها این کار رو بکنین ...(اما روش اکثرشون مثل بالا هست و یه حله و یه شرطه ...
کد بالا کاری با واژه input نداره ... input اسمه تگ هست(مراجعه شود به زمان های ML) درواقع کد بالا میاد همه ی اون element هایی که تگهاشون input هست رو چک میکنه تا برسه به اونی که مقدار value برابر جستجو هست ... (یعنی با بقیه اونایی که تگ input دارن کاری نداره)
چرا همونطوری که بالا گفتم شما براساس هرنوع ویژگی(attribute) که در تگ ها هست میتونید کار کنید خدمت شما(کلیک بر اساس اسم کلاس)

Dim webdoc As HtmlElementCollection = WebBrowser1.Document.All
For Each el As HtmlElement In webdoc
If el.GetAttribute("className") = "button-search" Then
el.InvokeMember("click")
End If
Next

Omid.R.A.Candy
شنبه 23 شهریور 1392, 13:06 عصر
نه دقیقا ... شما میتونید با id ، value ،اسم تگ ، اسم کلاس،و هرنوع Attribute دیگه در تگ ها این کار رو بکنین ...(اما روش اکثرشون مثل بالا هست و یه حله و یه شرطه ...
کد بالا کاری با واژه input نداره ... input اسمه تگ هست(مراجعه شود به زمان های ML) درواقع کد بالا میاد همه ی اون element هایی که تگهاشون input هست رو چک میکنه تا برسه به اونی که مقدار value برابر جستجو هست ... (یعنی با بقیه اونایی که تگ input دارن کاری نداره)
چرا همونطوری که بالا گفتم شما براساس هرنوع ویژگی(attribute) که در تگ ها هست میتونید کار کنید خدمت شما(کلیک بر اساس اسم کلاس)

Dim webdoc As HtmlElementCollection = WebBrowser1.Document.All
For Each el As HtmlElement In webdoc
If el.GetAttribute("className") = "button-search" Then
el.InvokeMember("click")
End If
Next


می تونیم بگیم نوشتن کد زی بهتر از کدی که تو پست پیش دادین؟


Dim webdoc As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input")

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

aliagamon
شنبه 23 شهریور 1392, 14:20 عصر
فرق چندانی نمیکنه ...اما درسته روش اول بهتره ... اما اینی که من گفتم برای تمام ELement ها میتونید استفاده کنید(با استفاده از اسم کلاس) اما مورد اول فقط واسه اونایی بود که تگ هاشون input هست ... اما در هرصورت اگه بخواین میتونید از کد اول استفاده کنید(خودتون ادیت کنید) ... سریع تر هم هست ..

Omid.R.A.Candy
شنبه 23 شهریور 1392, 15:33 عصر
حالا که رفیم سراغ این روش شما ، چطوری می تونیم تکسباکس این سایت رو به روشی غیر از آی دی پرش کنیم؟


و چطور می تونیم معنی رو که سایت به میده رو در یه تکس باکس نشون بدیم؟

aliagamon
شنبه 23 شهریور 1392, 19:29 عصر
شما چرا سعی نمیکنی خودتون بنویسین کد هارو ... با کپی کردن کسی یاد نمیگیره بخدا....به هرحال
خدمت شما:

Dim webdoc As HtmlElementCollection = WebBrowser1.Document.All
For Each el As HtmlElement In webdoc
If el.GetAttribute("className") = "search-box" Then
el.SetAttribute("value", "ماسیا") 'mahi dar zaban pahlavi
End If
Next

شما اصلا اون روش هایی که گفتم رو نگاه کردین؟(عبارات با قاعده و html agility (http://htmlagilitypack.codeplex.com/)) خدایی شما یه نگاه بکنین حداقل بعد بیاین دوباره بگین ....

ali.rk
شنبه 23 شهریور 1392, 20:08 عصر
کافیه به این آدرس بری ...
http://www.farsilookup.com/p2p/seek.jsp?lang=fa&word=%D8%B3%D8%B9%D9%8A%D8%AF
این قسمت %D8%B3%D8%B9%D9%8A%D8%AF معادل کلمه سعید هستش
فقط باید اول کلمات رو تبدیل کنی بعد جایگزین همین ....

Omid.R.A.Candy
شنبه 23 شهریور 1392, 20:11 عصر
کافیه به این آدرس بری ...
http://www.farsilookup.com/p2p/seek.jsp?lang=fa&word=%D8%B3%D8%B9%D9%8A%D8%AF
این قسمت %D8%B3%D8%B9%D9%8A%D8%AF معادل کلمه سعید هستش
فقط باید اول کلمات رو تبدیل کنی بعد جایگزین همین ....

لینکی که دادی کار نمی کنه!

aliagamon
شنبه 23 شهریور 1392, 20:42 عصر
خوب از این هم میشه استفاده کرد(جای تبدیل):


http://www.farsilookup.com/p2p/seek.jsp?lang=fa&word=شید

Omid.R.A.Candy
شنبه 23 شهریور 1392, 21:16 عصر
خوب از این هم میشه استفاده کرد(جای تبدیل):


http://www.farsilookup.com/p2p/seek.jsp?lang=fa&word=شید



این پستتون به چه دردی می خوره؟

aliagamon
شنبه 23 شهریور 1392, 21:25 عصر
لینکی ali.rk داده بود رو اصلاح کردم همین...:لبخند: