2013-10-23 8 views
6

में AJAX अनुरोध को संसाधित करें मेरे पास एक बटन क्लिक होने के बाद वेबपृष्ठ से स्रोत कोड को स्क्रैप करने के लिए लिखा गया एक प्रोग्राम है। मैं सही पेज को स्क्रैप करने में असमर्थ हूं क्योंकि मुझे लगता है कि एक AJAX अनुरोध भेजा जा रहा है, और मैं इस प्रतिक्रिया के लिए इंतजार नहीं कर रहा हूं। मेरे कोड वर्तमान में है:Htmlunit

public class Htmlunitscraper { 

    private static String s = "http://cpdocket.cp.cuyahogacounty.us/SheriffSearch/results.aspx?q=searchType%3dSaleDate%26searchString%3d10%2f21%2f2013%26foreclosureType%3d%27NONT%27%2c+%27PAR%27%2c+%27COMM%27%2c+%27TXLN%27"; 

    public static String scrapeWebsite() throws IOException { 

    java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 

    final WebClient webClient = new WebClient(); 
    final HtmlPage page = webClient.getPage(s); 
    final HtmlForm form = page.getForms().get(2); 
    final HtmlSubmitInput button = form.getInputByValue(">"); 
    final HtmlPage page2 = button.click(); 
    String originalHtml = page2.refresh().getWebResponse().getContentAsString(); 
    return originalHtml; 
    } 
} 

इस link की चर्चा करते हुए के बाद, मैं इसे ठीक करने की मैं विधि "webClient.waitForBackgroundJavaScript (10000)" को लागू कर सकता है विश्वास करते हैं। एकमात्र मुद्दा यह है कि मुझे यह नहीं समझना है कि यह कैसे करना है क्योंकि हर बार जब मैं बटन पर क्लिक करता हूं तो मैं एक HTML क्लास ऑब्जेक्ट बनाता हूं, न कि WebClient ऑब्जेक्ट। समस्या को ठीक करने के लिए मैं इस विधि को कैसे शामिल कर सकता हूं?

उत्तर

2

मैं

webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 

की स्थापना के समाधान की कोशिश करेंगे इस कारण होगा सभी ajax तुल्यकालिक होने के लिए कहता है।

वैकल्पिक रूप से, क्या आपने पेज को प्राप्त करने के बाद "webClient.waitForBackgroundJavaScript (10000)" पर कॉल करने के अपने समाधान में प्रयास किया?

कुछ इस तरह:

final HtmlPage page2 = button.click(); 
webClient.waitForBackgroundJavaScript(10000) 
String originalHtml = page2.asXml(); 
return originalHtml; 

का उपयोग करें भी htmlunit 2.13

5

मेरे लिए यह NicelyResynchronizingAjaxController साथ htmlunit 2.15 उपयोग करने के लिए मदद की, और भी

webClient.getOptions().setThrowExceptionOnScriptError(false); 

मेरा पूरा सेटअप

है
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.getOptions().setCssEnabled(false); 
    webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
संबंधित मुद्दे