2012-05-04 12 views
9

मैं HTMLUnit का उपयोग कर रहा हूं। यह मेरी आवश्यकताओं को अच्छी तरह से उपयुक्त बनाता है। लेकिन यह बहुत धीमी प्रतीत होता है। उदाहरण के लिए: मैं इस परिदृश्य पर HTMLUnitHTMLUnit: सुपर धीमी निष्पादन?

का उपयोग कर स्वचालित है
Goto Google page 
Enter some text 
Click on the search button 
Get the title of the results page 
Click on the first result. 

कोड:

long t1=System.currentTimeMillis(); 
Logger logger=Logger.getLogger(""); 
logger.setLevel(Level.OFF); 
WebClient webClient=createWebClient(); 
WebRequest webReq=new WebRequest(new URL("http://google.lk")); 

HtmlPage googleMainPage=webClient.getPage(webReq); 
HtmlTextInput searchTextField=(HtmlTextInput) googleMainPage.getByXPath("//input[@name='q']").get(0); 
HtmlButton searchButton=(HtmlButton) googleMainPage.getByXPath("//button[@name='btnK']").get(0); 

searchTextField.type("Sri Lanka"); 
System.out.println("Text typed!"); 
HtmlPage googleResultsPage= searchButton.click(); 
System.out.println("Search button clicked!"); 

System.out.println("Title : " + googleResultsPage.getTitleText()); 

HtmlAnchor firstResultLink=(HtmlAnchor) googleResultsPage.getByXPath("//a[@class='l']").get(0); 
HtmlPage firstResultPage=firstResultLink.click(); 
System.out.println("First result clicked!"); 

System.out.println("Title : " + firstResultPage.getTitleText()); 
//System.out.println(firstResultPage.asText()); 
long t2=System.currentTimeMillis(); 
long diff=t2-t1; 
System.out.println("Time elapsed : " + milliSecondsToHrsMinutesAndSeconds(diff)); 

webClient.closeAllWindows(); 

यह अच्छी तरह से 100% काम करता है। लेकिन इसमें 3 मिनट लगते हैं, 41 सेकंड

मुझे लगता है कि धीमी निष्पादन का कारण पृष्ठ पर प्रत्येक तत्व को मान्य कर रहा है।

मेरा प्रश्न है HTMLUnit के निष्पादन समय को कैसे कम करें? वेबपृष्ठों पर सत्यापन अक्षम करने का कोई तरीका है।

अग्रिम धन्यवाद!

+0

क्या आप कोड पेस्ट कर सकते हैं? – UVM

+0

कृपया अद्यतन कोड खोजें। –

+0

जेएस समर्थन को अक्षम करने से यह तेजी से कम हो जाएगा –

उत्तर

6
  • नवीनतम HTMLunit संस्करण (2.9) का उपयोग करना सुनिश्चित करें। मेरे पिछले संस्करण से प्रदर्शन बढ़ावा मिला था।

मुझे आपके उदाहरण को सेट किए गए विकल्पों के आधार पर 20s या 40s के भीतर किया जाता है। जैसा कि मैं वेब क्लाइंट प्रारंभिकता नहीं देख सकता, मुझे लगता है कि यह समस्या हो सकती है।

WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6); 
    client.setTimeout(60000); 
    client.setRedirectEnabled(true); 
    client.setJavaScriptEnabled(true); 
    client.setThrowExceptionOnFailingStatusCode(false); 
    client.setThrowExceptionOnScriptError(false); 
    client.setCssEnabled(false); 
    client.setUseInsecureSSL(true); 
1

मैं यह भी अनुशंसा जावास्क्रिप्ट के लिए एक समय सीमा निर्धारित करने की:

यहाँ एक 20 इलाज के लिए मेरी initialisation है

client.setJavaScriptTimeout(30000); //e.g. 30s 
10

वर्तमान htmlUnit 2.13 के लिए, सेटिंग विकल्पों से थोड़ा भिन्न है क्या अधिकतममैक्स प्रदान किया गया है:

final WebClient webClient = new WebClient(BrowserVersion.CHROME); 
webClient.getOptions().setCssEnabled(false);//if you don't need css 
webClient.getOptions().setJavaScriptEnabled(false);//if you don't need js 
HtmlPage page = webClient.getPage("http://XXX.xxx.xx"); 
... 

अपने स्वयं के परीक्षण में, यह 8 गुना फास है डिफ़ॉल्ट विकल्पों की तुलना में ter। (ध्यान दें कि यह वेबपृष्ठ-निर्भर हो सकता है)

+3

जेएस को अक्षम करने से हमेशा तेज निष्पादन होता है। हालांकि, ओपी का उल्लेख है 'जावास्क्रिप्ट को अक्षम करना एक विकल्प नहीं है!' :) –

+0

ओपी क्या खड़ा है? क्या आपका मतलब है कि जेएस को अक्षम नहीं किया जाना चाहिए? – fstang

+0

मेरा मतलब है, प्रश्नकर्ता ने इस सवाल पर टिप्पणी में कहा कि जेएस को अक्षम करने का विकल्प –

संबंधित मुद्दे