2013-10-23 27 views
6

Düğme tıklandıktan sonra web sayfasından kaynak kodu kazımak üzere yazılmış bir programım var. Doğru sayfayı kazıyorum çünkü bir AJAX isteğinin gönderildiğine inanıyorum ve bu yanıtın gerçekleşmesini beklemiyorum. Kodum şu anda:İşlem Htmlunit'te AJAX isteği

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; 
    } 
} 

bu link atıfta sonra ben yöntemi "webClient.waitForBackgroundJavaScript (10000)" uygulayabileceği Bunu düzeltmek için inanıyoruz. Tek sorun, bunu nasıl yapacağımı anlamıyorum çünkü düğmeyi tıklattığımda, bir WebClient nesnesi değil, bir HtmlPage nesnesi oluşturuyorum. Sorunu çözmek için bu yöntemi nasıl ekleyebilirim?

cevap

2

tüm ajax senkron olması çağıran bu neden olur

webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 

ayar çözümü çalışacaktı.

Alternatif olarak, sayfayı aldıktan sonra "webClient.waitForBackgroundJavaScript (10000)" araması yapmak için çözümünüzde denediniz mi? Böyle

şey:

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

Benim için 2.13

5

da HtmlUnit'in kullanın o NicelyResynchronizingAjaxController'ı ile HtmlUnit'in 2.15 kullanmak için yardımcı oldu ve ayrıca

webClient.getOptions().setThrowExceptionOnScriptError(false); 

Benim tam kurulum

olduğunu
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24); 
    webClient.getOptions().setJavaScriptEnabled(true); 
    webClient.getOptions().setThrowExceptionOnScriptError(false); 
    webClient.getOptions().setCssEnabled(false); 
    webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 
İlgili konular