Utilisation du code java-script dans Mathematica
J'ai le fichier HTML suivant stocké sur "C: \ local.html":
<html>
<head>
<script type="text/javascript">
function execute()
{
const urlParams = new URLSearchParams(window.location.search);
const param = urlParams.get('param');
var text_box = document.getElementById("path_text");
text_box.value = param;
}
</script>
</head>
<body onload="execute()">
<textarea id="path_text" rows="40" cols="80" style="font-size:75%"></textarea><br/>
</body>
</html>
Si j'ouvre le fichier dans mon navigateur Web comme "file: /// C: /local.html? Param = Un texte intéressant" J'ai une page Web avec la zone de texte qui contient le texte "Un texte intéressant" qui a été transmis à la variable java-script par URL param.
Maintenant, je veux importer le même fichier dans Mathematica avec le même paramètre d'URL, puis extraire le contenu textarea id="path_text"après l'exécution du script java.
Le code suivant
Import["file:///C:/local.html?param=some dfsf"]
donne l'erreur "Le fichier n'a pas été trouvé".
Les deux codes suivants ne donnent aucune erreur mais ne donnent pas non plus de données, comme le code java-script n'a pas été exécuté ou / et le paramètre URL n'a pas été transmis.
Import["file:///C:/local.html",
Parameters -> {"param" -> "Some interesting text"}]
Import["C:\\local.html",
Parameters -> {"param" -> "Some interesting text"}]
Comment importer un fichier HTML local avec des paramètres d'URL passés à java-script et java-script exécuté?
METTRE À JOUR:
En utilisant les conseils d'utilisation de Flinty StartWebSessionet WebExecutej'ai compris comment extraire le contenu de la zone de texte par le code java-script:
session = StartWebSession[Visible -> False];
WebExecute[
"OpenPage" -> "file:///C:/local.html?param=Some interesting text"];
WebExecute[session,
"JavascriptExecute" ->
"return document.getElementById('path_text').value"]
DeleteObject[session]
Clear[session]
(*"Some interesting text"*)
Réponses
Je peux charger la page avec Firefox et obtenir l'élément. Mais je ne pense pas que Wolfram ait implémenté l'extraction d'attributs via XPath. L'utilisation "JavascriptExecute"fonctionne cependant.
session = StartWebSession[Visible -> False];
WebExecute[session, {
"OpenPage" -> "file:///C:/local.html?param=some%20dfsf"
}]
(* here we try to get the element and it works *)
e = WebExecute[session, {
"LocateElements" -> "XPath" -> "//*[@id='path_text']"
}]
(* here we try to get the .value attribute, but it won't work and returns {{}}.
This XPath query doesn't even work in the Firefox console either. *)
a = WebExecute[session, {
"LocateElements" -> "XPath" -> "//*[@id='path_text']/@value"
}]
(* we can try to execute js on the page to extract the attribute, this works *)
result = WebExecute[session,
"JavascriptExecute" -> "return document.getElementById('path_text').value"]
DeleteObject[session]