ورود

View Full Version : سوال: بدست آوردن یک ID



hamidrezax1
شنبه 11 اردیبهشت 1400, 15:44 عصر
سلام وقت بخیر دوستان.معمولا شما با کد زیر میتونید چیزی رو که میخواید درون یک تکس باکس در صفحه وب قرار بدین اما مشکلی که من بهش برخوردم این هست که تکست باکس درون یک کلاس قرار گرفته و من ID اون تکس باکس رو نمیدونم و تنها چیزی که دارم اندکس و کلاس اون تکست باکس هست.چجوری میتونم ID اون تکست باکس ها رو بدست بیارم.ممنون میشم راهنمایی کنید




Me.WebBrowser1.Document.GetElementById("nam_ID").InnerText = "TEXT"

the king
شنبه 11 اردیبهشت 1400, 19:50 عصر
سلام وقت بخیر دوستان.معمولا شما با کد زیر میتونید چیزی رو که میخواید درون یک تکس باکس در صفحه وب قرار بدین اما مشکلی که من بهش برخوردم این هست که تکست باکس درون یک کلاس قرار گرفته و من ID اون تکس باکس رو نمیدونم و تنها چیزی که دارم اندکس و کلاس اون تکست باکس هست.چجوری میتونم ID اون تکست باکس ها رو بدست بیارم.ممنون میشم راهنمایی کنید




Me.WebBrowser1.Document.GetElementById("nam_ID").InnerText = "TEXT"






Public Shared Function GetElementsByClass (root As HtmlElement, className As String, Optional tagName As String = Nothing) As HtmlElement()
Dim items = New List(Of HtmlElement)
If String.IsNullOrEmpty (tagName) Then
For Each item As HtmlElement In root.All
If item.GetAttribute ("className") = className Then items.Add(item)
Next
Else
For Each item As HtmlElement In root.GetElementsByTagName (tagName)
If item.GetAttribute ("className") = className Then items.Add(item)
Next
End If
Return items.ToArray()
End Function


مثلا :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim items = GetElementsByClass (Me.WebBrowser1. Document.Body, "YourClassName")
For Each item In items
item.InnerText = "TEXT"
Next
End Sub

یا اگر دنبال فقط تگ خاصی مثلا تگ های <input> هستید :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim items = GetElementsByClass (Me.WebBrowser1. Document.Body, "YourClassName", "input")
For Each item In items
item.InnerText = "TEXT"
Next
End Sub

hamidrezax1
شنبه 11 اردیبهشت 1400, 20:12 عصر
دوست عزیز ممنون از پاسخگویتون.متاسفانه من نتونستم به اون چیزی که میخوام برسم.من میخوام داخل چند تکست باکس چند متن وارد کنم و در نهایت یک کلیک رو کلیک کنم.تمام این تکست باکس ها درون یک کلاس هستش و ID ندارن.برای مثال خدمتتون همین سایت رو ارسال میکنم تا قشنگ منظورم رو برسونم. الان کلاسی که این باتن داره رو لطفا دقت کنید.من چجوری میتونم ID بدست بیارم و روش کلیک کنم
این هم کلاس مربوطه
w3-button w3-bar-item w3-hover-white w3-hover-text-green
آدرس سایت (https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_getelementsby classname)

153284

the king
شنبه 11 اردیبهشت 1400, 20:52 عصر
دوست عزیز ممنون از پاسخگویتون.متاسفانه من نتونستم به اون چیزی که میخوام برسم.من میخوام داخل چند تکست باکس چند متن وارد کنم و در نهایت یک کلیک رو کلیک کنم.تمام این تکست باکس ها درون یک کلاس هستش و ID ندارن.برای مثال خدمتتون همین سایت رو ارسال میکنم تا قشنگ منظورم رو برسونم. الان کلاسی که این باتن داره رو لطفا دقت کنید.من چجوری میتونم ID بدست بیارم و روش کلیک کنم
این هم کلاس مربوطه
w3-button w3-bar-item w3-hover-white w3-hover-text-green


نمونه کد که براتون نوشتم.


Me.WebBrowser1.ScriptErrorsSuppressed = True
Me.WebBrowser1.Navigate("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_getelementsby classname")



Dim items = GetElementsByClass (Me.WebBrowser1. Document.Body, "w3-button w3-bar-item w3-hover-white w3-hover-text-green", "button")
For Each item In items
item.InnerText = "Hello"
item.InvokeMember("Click")
Next

hamidrezax1
شنبه 11 اردیبهشت 1400, 21:02 عصر
ممنونم دوست گرامی ببخشید که باز هم سوال میکنم آیا امکان این هست که متن تگ های پاین رو هم بتونم تغیر بدم.ممنونم از وقتی که میذارید

<div class="example">First div element with class="example".</div>

the king
شنبه 11 اردیبهشت 1400, 21:10 عصر
ممنونم دوست گرامی ببخشید که باز هم سوال میکنم آیا امکان این هست که متن تگ های پاین رو هم بتونم تغیر بدم.ممنونم از وقتی که میذارید

<div class="example">First div element with class="example".</div>


اینجا className مقدار "example" داره و tagName مقدار "div"، یعنی GetElementsByClass (Me.WebBrowser1. Document.Body, "example", "div") و در آیتم هایی که پیدا می کنه InnerText رو تغییر می دهید.

Dim items = GetElementsByClass (Me.WebBrowser1. Document.Body, "example", "div")
For Each item In items
item.InnerText = "Your text"
Next

hamidrezax1
شنبه 11 اردیبهشت 1400, 21:12 عصر
دقیقا مشکل من اینجاست که انگار این کلاس رو نمیشناسه و بدون تغیر از حلقه خارج میشه.ممنون میشم راهنمایی بفرمایید

the king
شنبه 11 اردیبهشت 1400, 22:06 عصر
دقیقا مشکل من اینجاست که انگار این کلاس رو نمیشناسه و بدون تغیر از حلقه خارج میشه.ممنون میشم راهنمایی بفرمایید

وقتی نمیدونم ورودی چیه طبعا مشکل خروجی رو نمیتونم تشخیص بدهم و نظری در موردش ندارم.

153285

hamidrezax1
شنبه 11 اردیبهشت 1400, 22:14 عصر
ممنونم بزرگوار از وقتی که برای من گذاشتین.سپاسگذارم:بوس:

Hossis
یک شنبه 26 اردیبهشت 1400, 08:11 صبح
از جی جوئری استفاده کنین با این تابع ساده و راحت
$('div.example').text('YourText');
فقط کافیه که فایل jquery.js رو در هدر صفحه ضمیمه کنید.

mazoolagh
دوشنبه 27 اردیبهشت 1400, 10:02 صبح
از جی جوئری استفاده کنین با این تابع ساده و راحت
$('div.example').text('YourText');
فقط کافیه که فایل jquery.js رو در هدر صفحه ضمیمه کنید.

حتما دقت کردین که ایشون از کنترل web browser استفاده میکنه و صفحه هم مال خودشون نیست که به header اون دسترسی داشته باشن.
روشی که شما پیشنهاد کردین نیازمند این هست که هم کد جاوااسکریپت به این صفحه تزریق بشه و هم کتابخانه jquery بهش معرفی بشه،
که البته هر دو مشابه هم هستن و باید با متد createelement انجام بشه و تا اینجا مشکلی نیست.

مشکل اینجاست که چون کنترل webbrowser روی داکیومنت مدل ie7 بنا شده، jquery به احتمال زیاد کار نخواهد کرد.

mazoolagh
دوشنبه 27 اردیبهشت 1400, 10:09 صبح
البته اگر بجای webbrowser از کنترل جدید webview2 ،که روی مرورگر edge بنا شده، استفاده بشه خیلی بهتره ولی اشکال این هست که کار با اون به راحتی webbrowser نیست و حتی اگر مرورگر edge هم نصب باشه باز باید این کنترل هم جداگانه نصب بشه.

Hossis
دوشنبه 27 اردیبهشت 1400, 12:54 عصر
از کجا میشه این کنترل رو نصب کرد؟؟

mazoolagh
سه شنبه 28 اردیبهشت 1400, 10:39 صبح
نصبش کاری نداره، کافی هست از طریق Nuget manager به پروژه تون اضافه کنین (webview2 رو جستجو کنین).

ولی تا جایی که یادمه لازم بود قبلش runtime اون رو هم نصب کنیم:
https://developer.microsoft.com/en-us/microsoft-edge/webview2/

و در toolbox به کنترل دسترسی دارین.

ولی همونجور که گفتم کارکردن باهاش سخته چون به dom دسترسی ندارین (واقعا نمیدونم چرا!)

تو گیت هاب یک پروژه هست (webview2.dom) که برای کار با اون باید #C بلد باشین.