PDA

View Full Version : بررسی وجود یک المنت html در صفحه



twelve
شنبه 16 آذر 1387, 21:46 عصر
با سلام

من میخوام چک کنم که توی یک صفحه المنت خاص html وجود داره یا نه ، این صفحه میتونه صفحه ای از پروژه خودم یا صفحه ای از سایت دیگر باشه. برای روشن تر شدن قضیه یک مثال میزنم : فرض کنین سایت ما با نام www.mysite.com باشه ، حالا توی یکی از صفحه ها ، یک تکست باکس داریم و یک دکمه ! داخل تکست باکس میزنیم : www.yoursite.com/test.aspx
حالا با زدن دکمه میخوایم چک کنیم توی صفحه وارد شده مثلا یک لینک خاص با مشخصات معین زیر وجود داره یا نه !!



<a href ="http://www.manchester.com" class="fergi">Manchester United </a>


اگر ابهامی وجود داره بگین توضیح بدم

Exception
شنبه 16 آذر 1387, 22:51 عصر
اینو برای همین مثالت نوشتم. برای بقیه موارد هم شبیه همینه:

var matchTag = null;
var aTags = document.getElementsByTagName('a');
for(var i=0;i<aTags.length&&(!matchTag);i++){
if(aTags[i].href.match('http://www.manchester.com') &&
aTags[i].className=='fergi' &&
aTags[i].innerHTML.match('Manchester United ')){
matchTag=aTags[i];
}
}
if(matchTag)alert("Found it!");
else alert("Not found!");

PS: بیشتر که فکر میکنم، شاید این بهتر باشه که با RegExp توی source بگردی!

twelve
شنبه 16 آذر 1387, 23:40 عصر
فکر میکنم سوالم رو متوجه نشدین ، توضیحات تکمیلی به ذهنم نمیاد ، به جز اینکه پیشنهاد کنم سوال رو دوباره مطالعه کنید

Exception
یک شنبه 17 آذر 1387, 00:03 صبح
اگر صفحه مربوط به سایت خودته که مشکلی نداره.
اینجوری سورس صفحه رو بگیر و بعد اون رو با همون RegExp چک کن.

function getPage(address){
var http;
if(window.ActiveXObject) http=new ActiveXObject("Microsoft.XMLHTTP");
else http=new XMLHttpRequest();
http.open("GET",address,false);
http.send(null);
return http.responseText;
}اما اگر صفحه مربوط به سایت خودت نیست، نمیتونی! البته توی IE6 فکر کنم بشه، ولی در حالت کلی، نه! برای توضیحات بیشتر اینو بخون: http://en.wikipedia.org/wiki/Cross-site_scripting


PS: الان که دوباره، (بعد از دیدن پست پایین) نگاه میکنم، میبینم که اینجا بخش ASP.NET هست، نه HTML! نمیدونم چرا فکر کردم فقط با Javascript میخوای.
راهش همینه که اردوان گفت. باید از سمت سرور صفحه رو بگیری و روش پردازش کنی.

ardavan
یک شنبه 17 آذر 1387, 11:15 صبح
سلام
شما برای این کار باید صفحه ای که تکس باکس به آن اشاره می کند را stream کرده و سپس در کد آن با کمک regex به دنبال لینکها بگردی و از میان آنها لینک مورد نظر را یا پیدا می کنی یا نه
جهت دانلود کردن آدرس دلخواه داریم :


Public Shared Function GetHtml( ByVal url As String) As string
Dim WC As New WebClient
Dim ENc As Encoding
ENc = Encoding.UTF8
Dim TW As IO.Stream = WC.OpenRead(url)
Dim RE As New IO.StreamReader(TW)
Dim Res As String = vbNullString
Res = RE.ReadToEnd
WC.Dispose()
TW.Close()
RE.Close()
Return Res
end function

حا باید در محتوای خروجی این صفحه به دنبال لینک ها بگردی (فقط با کمک regex ها)



Public Shared ReadOnly Property href() As Regex
Get
Return New System.Text.RegularExpressions.Regex("<a.+?href\=(?<link>.+?)(?=[>\s]).*?>(?<lnkText>.+?)</a>", RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant Or RegexOptions.Compiled)
End Get
End Property

Public Shared Function FetchLinks( ByVal html As String) As string()
Dim matches As MatchCollection = href.Matches(html)
Dim urls(matches.Count) As String
Dim value As String = vbNullString
Dim url As String = vbNullString
Dim inx As Int64 = 0
For Each match As Match In matches
If (match.Groups.Count > 1) Then
url = match.Groups(1).Value
urls(inx) = url
inx += 1
End If
Next
Return urls
End Function


حالا باید به تابع gethtml آدرس وب سایت پاس بدی خروجیشو به findlink و حاصل که آرایی از لینک ها باشد بررسی کنی
فقط namespace ها فراموش نشده


system.net

اگه بخوای بهتر بنویسی باید 1- ابتدا صحت url با Regex بررسی کنی سپس به gethtml بدی
2-بعد از دریافت لینک ها با استفاده از class uri و متد trycreate هر لینک تبدیل به یک url کنی بعد خیلی کارای دیگه میشه کرد.
3- به سایت regex.com سری بزن regular های جدید و بهترو بگیر
امید وارم تونسته باشم کمک کرد باشم (بابت کد های چپ وراست شرمنده )