الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في التعامل مع الحزمة htmlunit

بدأه rohaili في 5 سبتمبر 2011 · 6 رد · 919 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كتبت الاوامر التالية للدخول على صفحة معينة واحضار عنوانها باستخدام الحزمة htmlunit ولكن البرنامج لا يعمل دون وجود خطأ واضح

ما الخطأ في البرنامج ؟


@Action
public void enter() throws Exception {
final WebClient webClient = new WebClient();
final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");

tf.setText(page.getTitleText());
webClient.closeAllWindows();
}

تحميل الحزمة htmlunit

http://sourceforge.net/projects/htmlunit/files/

شرح الحزمة والذي اعتمدت عليه في كتابة الاوامر السابقة

http://htmlunit.sourceforge.net/

وجزاكم الله خيرا

300_130.gif

#2

إذا كنت تريد فقط الحصول على عنوان الصفحة، يمكنك عمله يدويا.

مثال

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NewClass {

	public static void main(String[] args) {
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("").openStream()));
			String line = "";
			Pattern p = Pattern.compile(".*?<title>(.*)</title>.*?");
			while ((line = reader.readLine()) != null) {
				Matcher m = p.matcher(line);
				if (m.matches()) {
					String title = m.group(1);
					System.out.println(title);
					break;
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}

إذا كنت تريد عمل parsing للصفحة، فمن الأفضل استعمال API خاصة بهذا الغرض، مثلا htmlparser، لأنه يبدو أن المكتبة التي تستعمل خاصة بال testing

#3

جزاك الله خيرا

أنا أريد عمل برنامج يدخل على الموقع باسم مستخدم وكلمة مرور ثم يضغط على رابط في الصفحة لينتقل للصفحة الثانية ويجلب منها بعض البيانات ثم يضغط على رابط معين لينتقل لصفحة ثالثة وهكذا , وكل الحزم التي استخدمها يتبين أنها لإختبار الصفحات مثل htmlunit .

ولا أدري هل توجد حزمة تقوم بالعمل الذي أريد أم لا ، مع العلم أني رأيت برنامجا مشابها لما أريد لكنه بالفيجوال أو السي .

أما الحزمة htmlparse فقد أن آخر تحديث لها في 2006 !

تم تعديل هذه المشاركة بواسطة rohaili في 6 سبتمبر 2011 في 07:30

300_130.gif

#4

يبدو أن المكتبة التي تستعمل هي المناسبة، لكن لا أستطيع مساعدتك لأني لم يسبق أن استعملتها

يمكن عمل login لموقع ما بدون استعمال المكتبة، من أجل ذلك، تسترجع العنوان الذي يكون في الخاصية action في ال form، ثم تنشئ HttpURLConnection للإتصال وإرسال login & password واسترجاع المحتوى.

مثلا بالنسبة للمنتدى، العنوان الخاص بتسجيل الدخول هو /index.php?app=core&module=global&section=login&do=process، وهو المستعمل في المثال التالي

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;

public class NewClass {

  public static void main(String[] args) {
	try {
  	URL url = new URL("/index.php?app=core&module=global&section=login&do=process");
  	HttpURLConnection urlConn = (HttpURLConnection) (url.openConnection());
  	urlConn.setDoOutput(true);
  	PrintWriter writer = new PrintWriter(urlConn.getOutputStream());
  	writer.print("username=herch&password=toto");
  	writer.flush();
  	writer.close();
  	String line = "";
  	BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), Charset.forName("windows-1256")));
  	while ((line = reader.readLine()) != null) {
    	System.out.println(line);
  	}
	} catch (Exception ex) {
  	ex.printStackTrace();
	}
  }
}
#5

أعتذر عن الإطالة في الرد نظراً لانشغالي بأمور عائلية

هلا أرفقت المشروع كاملاً علي أنظر فيه في وقت فراغي

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

تعاملت مع هذه المكتبة في الآونة الأخيرة، وصراحة أبهرت بعملها

جرب هذا الكود:

WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_8); // There are many browsers available and you can choose any
HtmlPage currentPage = null;
try
{
	currentPage = (HtmlPage) webClient.getPage("http://www.google.com");
}
catch(Exception e)
{
	// Cannot get the page
}
System.out.println(currentPage.getTitleText());

تم تعديل هذه المشاركة بواسطة Eng.Fouad في 13 سبتمبر 2011 في 05:57

597657.png
#7

أعتذر عن الخطأ غير المقصود بإغلاق الموضوع

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة