Tengo una página que tiene un script y contiene una matriz que necesito (myHashDay).
<script type="text/javascript"> function toggleCheckBoxes(obj) { var theForm = document.getElementById("thePage:SiteTemplate:theForm"); for (var i=0; i<theForm.elements.length; i++){ if (theForm.elements[i].type=="checkbox" && theForm.elements[i].name != obj.name) { theForm.elements[i].checked = false; } } } // ATLAS-1089: back & continue buttons showing twice for Reserved Group/Emergency Appointments function checkIfButtonsShowTwice() { // from 1st form var continueBtn = document.getElementById("thePage:SiteTemplate:theForm:continueBtn"); var backBtn = document.getElementById("thePage:SiteTemplate:theForm:backBtn"); // from 2nd form var continueBtnToHide = document.getElementById("thePage:SiteTemplate:theForm2:continueBtn"); var backBtnToHide = document.getElementById("thePage:SiteTemplate:theForm2:form2BackBtn"); // the controller logic for rendering the buttons is fragile so... front end solutions ftw if(continueBtn != null){ if (continueBtnToHide != null) { continueBtnToHide.style.display = "none"; } } } var myDayHash = new Array(); myDayHash['14-9-2023'] = true; myDayHash['4-12-2023'] = true; myDayHash['31-1-2024'] = true; myDayHash['1-2-2024'] = true; myDayHash['27-2-2024'] = true; myDayHash['28-2-2024'] = true; myDayHash['4-3-2024'] = true; myDayHash['5-3-2024'] = true; myDayHash['6-3-2024'] = true; myDayHash['7-3-2024'] = true; myDayHash['11-3-2024'] = true; myDayHash['12-3-2024'] = true; myDayHash['13-3-2024'] = true; myDayHash['14-3-2024'] = true; myDayHash['18-3-2024'] = true; myDayHash['19-3-2024'] = true; myDayHash['20-3-2024'] = true; myDayHash['21-3-2024'] = true; myDayHash['25-3-2024'] = true; myDayHash['26-3-2024'] = true; myDayHash['27-3-2024'] = true; var ofcAptDateStr = null;ofcAptDateStr = ''; var splitDate = 'Thu Sep 14 00:00:00 GMT 2023'.split(" "); var minApptDate = splitDate[1] + ' ' + splitDate[2] + ' ' + splitDate[5]; } </script>Así que necesito obtener la matriz myDayHash de ella.
Lo que estoy tratando de hacer:
driver.get('\test.html') element = driver.execute_script("myDayHash")Pero tampoco devuelve nada. Probé element = driver.execute_script("return myDayHash"). Pero no devuelve ninguno.
Pero si uso la consola en Chrome Broswer y escribo "myDayHash", imprime toda mi matriz.
¿Cómo puedo obtener esta matriz en python?
Esa variable se define en el alcance de la función (no global). En otras palabras, no puedes.
Aquí hay una solución usando BeautifulSoup y regex.
from bs4 import BeautifulSoup import requests import re r = requests.get('http://website.com/test.html') soup = BeautifulSoup(r.content) array = soup.select('script') text = ' '.join([elem.text for elem in array]) La siguiente expresión regular le brinda los valores de la estructura de myDayHash en forma de lista de tuplas.
myDayHash = re.findall(r"myDayHash\[\'(.*?)\'\] = (.*?);", text) print(dict(myDayHash))Esto nos da el resultado esperado, ahora, según sus requisitos, puede almacenar la clave: valor en cualquier estructura de datos.
{ '14-9-2023': 'true', '4-12-2023': 'true', '31-1-2024': 'true', '1-2-2024': 'true', '27-2-2024': 'true', '28-2-2024': 'true', '4-3-2024': 'true', '5-3-2024': 'true', '6-3-2024': 'true', '7-3-2024': 'true', '11-3-2024': 'true', '12-3-2024': 'true', '13-3-2024': 'true', '14-3-2024': 'true', '18-3-2024': 'true', '19-3-2024': 'true', '20-3-2024': 'true', '21-3-2024': 'true', '25-3-2024': 'true', '26-3-2024': 'true', '27-3-2024': 'true' } from bs4 import BeautifulSoup import requests import re r = requests.get('http://website.com/test.html') soup = BeautifulSoup(r.content) array = soup.select('script') text = ' '.join([elem.text for elem in array]) myDayHash = re.findall(r"myDayHash\[\'(.*?)\'\] = (.*?);", text) print(dict(myDayHash))