Cómo extraer el valor de JavaScript variable dinámica usando BeautifulSoup y Requests

Oct 27 2020

Estoy raspando la página de inicio de sesión, solo necesito VAR SALT = variable en JAVASCRIPT TAG. Este es el sitio web =https://ib.muamalatbank.com/ib-app/loginpage

Cuando leo todas las respuestas aquí, usando BeautifulSoup y las solicitudes, puedo obtener estas 2 variables (tal vez porque es estática): var muserid = 'Se debe completar la ID de usuario'; var mpassword = 'La contraseña debe ser completada';

Pero cuando intento Scrape this var SALT =, me da todo el valor VAR. Mi código de resultado en Python

Solo necesito este valor VAR SALT solo sin comillas Aquí el PIC = Fuente VAR SALT VALUE

Ya estoy usando re.search, y re.compile, re.findall, pero soy un novato, keep me da el error "Object can't string ...."

from bs4 import BeautifulSoup as bs
import requests
import re
import lxml
import json

URL = 'https://ib.muamalatbank.com/ib-app/loginpage'
REF = 'https://ib.muamalatbank.com'

HEADERS = {'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0', 'origin': URL, 'referer': REF}

s = requests.session()
soup = bs(s.get(URL, headers=HEADERS, timeout=5, verify=False).text,"html.parser")

script = soup.find_all("script")[11]
ambilteks = soup.find_all(text=re.compile("salt=(.*?)"))
print(ambilteks)

Nota: 1) necesito ayuda pero no estoy interesado en usar Selenium,

  1. Tengo un script en PHP-Laravel, está funcionando completamente (lo necesito en Python), pero no tengo conocimiento en laravel, cualquiera puede preguntarme, le daré el código de Laravel

Por favor ayúdame muchas gracias

Respuestas

QHarr Oct 27 2020 at 09:54

Intente usar re.compile y agregue el ''en su expresión regular, luego extraiga el primer resultado. No probado con respuesta de página. Primero verifique que la cadena esté realmente presente en la respuesta.

p = re.compile(r"var salt='(.*?)'")
res = p.findall(s.get(URL, headers=HEADERS, timeout=5, verify=False).text)[0]
print(res)