Télécharger le fichier en utilisant HtmlUnit
Je suis en train de télécharger un fichier xls pour un site web. Lorsque je clique sur le lien pour télécharger le fichier, je reçois un javascript boîte de confirmation. Je le manipuler comme ci-dessous
ConfirmHandler okHandler = new ConfirmHandler(){
public boolean handleConfirm(Page page, String message) {
return true;
}
};
webClient.setConfirmHandler(okHandler);
Il y a un lien pour télécharger un fichier.
<a href="./my_file.php?mode=xls&w=d2hlcmUgc2VsbElkPSd3b3JsZGNvbScgYW5kIHN0YXR1cz0nV0FJVERFTEknIGFuZCBkYXRlIDw9IC0xMzQ4MTUzMjAwICBhbmQgZGF0ZSA%2BPSAtMTM1MDgzMTU5OSA%3D" target="actionFrame" onclick="return confirm('Do you want do download XLS file?')"><u>Download</u></a>
Je clique sur le lien à l'aide de
HTMLPage x = webClient.getPage("http://working.com/download");
HtmlAnchor anchor = (HtmlAnchor) x.getFirstByXPath("//a[@target='actionFrame']");
anchor.click();
handeConfirm() la méthode est exécutée. Mais je n'ai aucune idée de comment faire pour enregistrer le flux de fichier à partir du serveur. J'ai essayé de voir le flux avec le code ci-dessous.
anchor.click().getWebResponse().getContentAsString();
Mais, le résultat est le même que celui de la page x. Quelqu'un sait comment faire pour capturer le flux à partir du serveur? Merci.
source d'informationauteur user367942
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un moyen d'obtenir InputStream à l'aide de WebWindowListener. À l'intérieur de webWindowContentChanged(WebWindowEvent cas), j'ai mis le code ci-dessous.
Après je reçois xls, j'ai pu enregistrer le fichier sur mon disque dur.
Je l'ai fait en fonction de votre post.. Remarque: vous pouvez modifier le type de contenu d'état pour télécharger uniquement type de fichier spécifique. par exemple.( application/octect-stream, application/pdf, etc).
Il y a un moyen plus facile si vous n'êtes pas dans emballage interface htmlunit avec le Sélénium. Simplement fournir de l'interface htmlunit du WebClient avec l'étendue WebWindowListener.
Vous pouvez également utiliser Apache commons.io pour faciliter la copie de flux.