ورود

View Full Version : کار با HTML



saber67
یک شنبه 24 دی 1391, 17:40 عصر
سلام
دو تا سوال دارم از دوستان
اول اینکه میشه وقتی توی WebBrowser یک صفحه اینترنتی رو لود کردیم و بعد تو اون صفحه یه تکست باکس باشه بدون اینکه اسم اون تکست باکس رو بدونیم چیزی به محتویاتش اضافه کنیم؟
اگه اسمشو بلد باشیم این جوری میشه:متفکر:
webbr.Document.All("TextBox Name").Value = "New Value"
در واقع مشکل اصلی پیدا کردن اسم تکست باکس درون صفحس یا اگه با روش دیگه ای هم بشه بدون دونستن اسمش محتویاتش رو تغییر داد خوبه
دوم اینکه باز مثل قبلی اگه یه صفحه رو لود کنیم تو WebBrowser بعد یه متنی تو صفحه باشه مثلا نوشته باشه -درخواست شما انجام شد- چه طوری بفهمیم چی نوشته؟ یعنی چه طوری متنش رو بدست بیاریم؟ چون واسه متن دیگه مثل تکست باکس و اینا اسمی در نظر نمی گیرن براش که بشه از طریق اون پیداش کرد!

MohammadGh2011
یک شنبه 24 دی 1391, 19:36 عصر
سلام عليکم

اگه شئ مورد نظر اسم نداره ميتونيد از id اون استفاده کنيد.يعني با ("")GetElementById



موفق باشيد

saber67
یک شنبه 24 دی 1391, 22:56 عصر
ممنون دوست عزیز، آره این تابع رو بلد بودم. مشکل اینجاست که اون تکست باکسه اسم و Id ش یکیه و نمیشه از قبل فهمید چیه! مثلا فرض کن اسم و ID ش متغیر باشه هر بار که صفحه رو لود کنی تکست باکس یه اسم و ID داشته باشه!
در مورد متن توی صفحه هم که نه اسم داره نه ID پس باید یه راه دیگه ای باشه که بشه اون متنو از توی صفحه تشخیص داد
مثلا تو یه صفحه نوشته باشه "خوش آمدید"، چه طوری میشه بهش دسترسی داشت؟ یعنی بشه خوندش حتی اگه بشه جستجو کرد هم خوبه! مثلا جستجو کنه که فلان متن تو این صفحه هست یا نه!

محسن واژدی
یک شنبه 24 دی 1391, 23:31 عصر
سلام علیکم
برای اشیای بدون name/id، پست 2 و 8 تاپیک زیر را بررسی کنید:
http://barnamenevis.org/showthread.php?352137-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%DA%A9%D9%84%DB%8C%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-WebBrowser1&p=1552729&viewfull=1#post1552729

موفق باشید

saber67
دوشنبه 25 دی 1391, 00:17 صبح
سلام علیکم
برای اشیای بدون name/id، پست 2 و 8 تاپیک زیر را بررسی کنید:
http://barnamenevis.org/showthread.php?352137-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%DA%A9%D9%84%DB%8C%DA%A9-%DA%A9%D8%B1%D8%AF%D9%86-WebBrowser1&p=1552729&viewfull=1#post1552729

موفق باشید

ممنون
خیلی راهنمایی خوبی بود

saber67
دوشنبه 25 دی 1391, 09:40 صبح
آقا محسن مشکلم با تکست باکس رفع شد
الان فقط مونده فهمیدن اینکه تو صفحه ای که لود میشه چه متن هایی هست! دقت کنین فقط متن خالیه که تو صفحه بین دو تگ TD قرار می گیره مثل کد زیر


<td width="100">متن نمونه:</td>

چه طور میشه فهمید تو صفحه ای که لود شده اینو نوشته؟

MohammadGh2011
دوشنبه 25 دی 1391, 12:37 عصر
سلام عليکم

براي به دست آوردن متن هم حتما Class داره از اون استفاده ميکنيم.
مثلا اين رو ببينيد من متن پست خودم (پست دوم همين تاپيک) رو در آوردم:

Private Sub Command1_Click()
On Error Resume Next
Dim res
res = WebBrowser1.Document.getElementById("post_message_1675913").innerText
Text1.Text = res
End Sub

Private Sub Form_Load()
WebBrowser1.Navigate "http://barnamenevis.org/showthread.php?378920-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-HTML"
End Sub

saber67
دوشنبه 25 دی 1391, 12:59 عصر
آقا محمد دمت گرم همینه
بدی WebBrowser1.Documents اینه که مثل بقیه قسمتای VB بعد از نقطه ای که می زاریم توابع و مقادیرش رو به صورت لیست نشون نمیده، آدم باید حدس بزنه چه توابعی داره!!:لبخند:

من با توجه به راهنمایی های شما و آقا محسن تونستم این کد رو بنویسم گفتم شاید به درد بقیه هم خورد
با این میشه همه متن تو صفحه رو تو یه لیست وارد کرد:

For n = 0 To WebBrowser1.Document.All.length - 1
If WebBrowser1.Document.All(n).tagName = "TD" Then
If WebBrowser1.Document.All(n).innerText <> "" Then
List1.AddItem WebBrowser1.Document.All(n).innerText
End If
End If
Next

بازم ممنون

saber67
دوشنبه 25 دی 1391, 13:28 عصر
یه سوال دیگه هم دارم
چه طور میشه صفحه ای که WebBrowser نشون میده رو اسکرول کرد؟
یعنی مثلا اگه تو صفحه 50 خط متن باشه و همش تو صفحه جا نشه بشه اسکرول بار رو جابجا کرد و پایین اورد که مطالب پایین صفحه رو نشون بده!

MohammadGh2011
دوشنبه 25 دی 1391, 14:06 عصر
یه سوال دیگه هم دارم
چه طور میشه صفحه ای که WebBrowser نشون میده رو اسکرول کرد؟
یعنی مثلا اگه تو صفحه 50 خط متن باشه و همش تو صفحه جا نشه بشه اسکرول بار رو جابجا کرد و پایین اورد که مطالب پایین صفحه رو نشون بده!

منظورتون رو متوجه نشدم...
اگه شما لينکي رو به وب براوزر بديد و اون صفحه خودش متن هاش زياد باشه اسکرول بار خودش پديدار ميشه و اين اجازه رو به شما ميده تا اسکرول رو جا به جا کنيد،در غير اينصورت اگه صفحه سايت متن زيادي نداشته باشه اسکرول هم به نمايش در نمياد.يعني بستگي به مطالب سايت يا صفحه داره.

saber67
دوشنبه 25 دی 1391, 14:14 عصر
منظورم اینه وقتی متن طولانی بود و اسکرول بار فعال شد! چه طور از طریق برنامه اونو جابه جا کنیم؟ یعنی قسمت های مختلف صفحه رو نشون بدیم
البته نه از طریق موس!

SlowCode
دوشنبه 25 دی 1391, 14:25 عصر
این کار رو با کد جاوااسکریپت انجام میدن، اگه سایت خودته این تابع رو بنویس و کافیه صداش کنی تا به عنصر با آی دی مورد نظر رو بیاره.
function top() {
document.getElementById( 'top' ).scrollIntoView();
};

مثلا این قسمتی هست که میخواییم نشون داده بشه:

<div id="top">top</div>ولی اگه سایت خودت نباشه، نمیدونم با کد html بشه این کار رو کرد یا نه.

saber67
دوشنبه 25 دی 1391, 14:48 عصر
این کار رو با کد جاوااسکریپت انجام میدن، اگه سایت خودته این تابع رو بنویس و کافیه صداش کنی تا به عنصر با آی دی مورد نظر رو بیاره.
function top() {
document.getElementById( 'top' ).scrollIntoView();
};

مثلا این قسمتی هست که میخواییم نشون داده بشه:

<div id="top">top</div>
ولی اگه سایت خودت نباشه، نمیدونم با کد html بشه این کار رو کرد یا نه. ولی من همچین چیزی ندیدم.:متفکر:

نه سایت خودم نیست
اما روشتون تقریبا جواب داد!
کافیه اسم یه کنترلی (مثلا تکست باکسی که پایین صفحه باشه) رو بدونیم بعد با تابعی که معرفی کردین اسکرول منتقل میشه روی اون فقط مشکلش اینه که اگه اسکرول افقی فعال باشه اونو هم تغییر میده تا کنترل ما رو در وسط صفحه نشون بده!

MohammadGh2011
دوشنبه 25 دی 1391, 15:00 عصر
منظورم اینه وقتی متن طولانی بود و اسکرول بار فعال شد! چه طور از طریق برنامه اونو جابه جا کنیم؟ یعنی قسمت های مختلف صفحه رو نشون بدیم
البته نه از طریق موس!
از دستور زير استفاده کنيد:
WebBrowser1.SetFocus
SendKeys ("{PGDN}")

saber67
دوشنبه 25 دی 1391, 15:11 عصر
از دستور زير استفاده کنيد:
WebBrowser1.SetFocus
SendKeys ("{PGDN}")


آره اینم میشه اما دو مشکل داره!
یکی اینکه ما نمی دونیم چند بار باید دکمه رو سند کنیم که کامل بیاد پایین صفحه!
دوم اینکه صفحه یه دفعه به اونجا نمیره تیکه تیکه میره!

saber67
دوشنبه 25 دی 1391, 22:17 عصر
یه سوال دیگه
وقتی یه صفحه رو لود کردیم و یه پیکچر باکس تو صفحس، با تابع زیر میشه یک عکس رو توی پیکچرباکس صفحه لود کرد:


WebBrowser1.Document.All("Pic Name").innerHTML="Pic Address"

حالا چه طوری میشه اون عکس که تو اون پیکچر باکس هست رو تو یه پیکچر باکس که توی فرم برنامه گذاشتیم نشون بدیم؟
از طریق آدرس واقعیش روی وب نباشه خیلی بهتره!

saber67
دوشنبه 25 دی 1391, 22:34 عصر
البته این تابع که گفتم فکر کنم جنبه عمومی نداره، یعنی نمیشه همه جا ازش استفاده کرد
اما تو برنامه من که با یه صفحه وب خاص کار داره جواب میده!
آیا تابع بهتری هست که عکسی با هر آدرس اینترنتی رو بشه تو پیکچر باکس یه صفحه لود کرد؟

saber67
دوشنبه 25 دی 1391, 22:49 عصر
تابع خودم درسته فقط یه اشتباه کوچولو کرده بودم، باید روبروی مساوی آدرس عکس مورد نظر رو به صورت زیر تعریف کنیم و به جای Pic Address آدرس دلخواه رو بزاریم


"<img src='Pic Address'/>"

برگردیم سر سوال اصلی!
چه طور این عکسی که تو صفحه وب لود کردیم رو تو برنامه خودمون بزاریم تو یه پیکچر باکس؟
ترجیحا مستقیما از همین عکسی که لود شده استفاده کنیم نه اینکه دوباره از آدرس اصلیش لود بشه تو پیکچر باکس برنامه!

saber67
سه شنبه 26 دی 1391, 10:41 صبح
نه سایت خودم نیست
اما روشتون تقریبا جواب داد!
کافیه اسم یه کنترلی (مثلا تکست باکسی که پایین صفحه باشه) رو بدونیم بعد با تابعی که معرفی کردین اسکرول منتقل میشه روی اون فقط مشکلش اینه که اگه اسکرول افقی فعال باشه اونو هم تغییر میده تا کنترل ما رو در وسط صفحه نشون بده!

یه تابع بهتر پیدا کردم!
مثل قبلی یک کنترلی چیزی تو پایین صفحه پیدا می کنیم و بعد روش با تابع زیر فکوس می کنیم:


WebBrowser1.Document.All("Control Name").focus

این طوری صفحه سریع میره پایین و ظاهرا تغییر نامناسب تو اسکرول افقی ایجاد نمی کنه!:لبخندساده: