¿Qué detiene a HtmlUnit de cargar la página de la tienda PSN?

Estoy intentando cargar la página Playstation Store con HtmlUnit, pero parece que todo lo que carga es una página en blanco con el text "Cargando …" (y un poco de javascript). Utilicé la siguiente configuration para hacer que HtmlUnit funcionara, pero irremediablemente (es kotlin):

@Test @Throws(Exception::class) fun homePage() { val webClient = WebClient(BrowserVersion.INTERNET_EXPLORER).apply { ajaxController = NicelyResynchronizingAjaxController() options.isUseInsecureSSL = true options.isThrowExceptionOnScriptError = false options.isJavaScriptEnabled = true options.isCssEnabled = true options.isRedirectEnabled = true options.isThrowExceptionOnFailingStatusCode = false options.isUseInsecureSSL = true options.isDownloadImages = true cookieManager.isCookiesEnabled = true waitForBackgroundJavaScript(10000) waitForBackgroundJavaScriptStartingBefore(10000) } val page = webClient.getPage<HtmlPage>("https://store.playstation.com/") Thread.sleep(10000) assertFalse(page.asXml().contains("Loading")) } 

No veo ningún error específico durante la carga de la página:

 мая 09, 2017 4:08:22 PM com.gargoylesoftware.htmlunit.html.HtmlScript isExecutionNeeded WARNING: Script is not JavaScript (type: application/json, language: ). Skipping execution. мая 09, 2017 4:08:22 PM com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController processSynchron INFO: Re-synchronized call to https://sonynetworkentertainment.112.2o7.net/b/ss/snestorewebloadglobal/1/chidv1/s75296982536092?AQB=1&ndh=1&t=9%2F5%2F2017%2016%3A8%3A22%202%20-180&ts=1494335302&vid=c61f4752-adfd-84d1-728c-187350f9aa37&pageName=web%3Aloading_start&v1=D%3DpageName&g=https%3A%2F%2Fstore.playstation.com%2F&r=&v2=xx-xx&ch=web%3Aloading_start&c68=D%3Dg&c72=web&v72=web&cc=USD&ce=UTF-8&server=web&events=event1&AQE=1 мая 09, 2017 4:08:22 PM com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController processSynchron INFO: Re-synchronized call to https://store.playstation.com/kamaji/api/chihiro/00_09_000/geo 

La pregunta es: ¿qué impide que HtmlUnit cargue la página? Traté de resolverlo por mi count, pero la única idea que surgió es que podría ser una especie de defensa contra browseres sin cabeza o JS muy pesados ​​que HtmlUnit no admite. Pero por ejemplo

https://account.sonyentertainmentnetwork.com

se puede abrir sin ningún problema.

Esto se llama SPA – Aplicación de una sola página . En general, las SPA tienen solo marcado básico, un contenedor y toda la interfaz de usuario se representa dinámicamente con frameworks como React o Angular .

Después de eliminar los scripts y styles de https://store.playstation.com, lo que queda es:

 <div id="waitAppLoading"> <div class="waitHorizon"> <div class="centerBox"> <div class="logoCtnr"></div> <div class="textBox"><div class="spinCtnr"></div><div id="appLoadingMsg"></div></div> <div class="startupErr"></div> </div> </div> </div> <div id="appRoot" class="hidden"></div> <div id="lockdownScreen"></div> <div id="global-wait"> <div class="waitHorizon"> <div class="waitContainer"> <div class="sq1"></div> <div class="sq2"></div> <div class="sq3"></div> <div class="sq4"></div> <div class="sq5"></div> <div class="sq6"></div> </div> </div> <div id="global-ps-loader"> </div> </div> <div id="notifierCtnr" class="mainCol"><div id="notifier-box"></div></div> <div id="storeNotAvail"></div> <div class="dimToolEl dimToolElProdTitle"></div> <div class="dimToolEl dimToolElProdSubTitle"></div> <div id="transact-iframe-container"> <iframe id="transact-iframe"></iframe> </div> 

Como ve, no hay contenido aquí, solo se trata de una estructura alámbrica para la aplicación. El cliente web no simula completamente el browser, y no ejecuta esos scripts. Es por eso que ves una página vacía.

Al less este código de Java funciona aquí. Obtuve el cuadro de dialog de selección de idioma como en FF real. Estoy usando el último código HtmlUnit. Esta es, en general, una buena idea.

  String url = "https://store.playstation.com/"; try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52)) { final HtmlPage page = webClient.getPage(url); webClient.waitForBackgroundJavaScript(1000 * 10); System.out.println("----------------"); System.out.println(page.asText()); System.out.println("----------------"); HtmlElement btn = page.querySelector(".btn"); System.out.println(btn.asXml()); System.out.println("----------------"); } 

Y por favor elimine las llamadas

  waitForBackgroundJavaScript(10000) waitForBackgroundJavaScriptStartingBefore(10000) 

desde su código de configuration. Estos methods NO están configurando ninguna opción; están haciendo la espera en el momento de la ejecución.