How Scraping Dynamic Variable JavaScript value using BeautifulSoup i Requests

Oct 27 2020

Skrobam stronę logowania, potrzebuję tylko zmiennej VAR SALT = w tagu JAVASCRIPT. To jest strona internetowa =https://ib.muamalatbank.com/ib-app/loginpage

Kiedy czytam wszystkie odpowiedzi tutaj, używając BeautifulSoup i żądań, mogę uzyskać te 2 zmienne (być może dlatego, że są statyczne): var muserid = 'Identyfikator użytkownika musi być wypełniony'; var mpassword = 'Hasło musi być wypełnione';

Ale kiedy spróbuję Scrape this var SALT =, to daje mi całą wartość VAR. Mój kod wynikowy w Pythonie

Potrzebuję tylko tej wartości VAR SALT bez cudzysłowu Tutaj PIC = Source VAR SALT VALUE

Używam już re.search i re.compile, re.findall, ale jestem nowicjuszem, funkcja keep daje mi błąd „Obiekt nie może ciąg…”

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)

Uwaga: 1) Potrzebuję pomocy, ale nie jestem zainteresowany używaniem Selenium,

  1. Mam skrypt w PHP-Laravel, jest w pełni działający (potrzebuję w Pythonie), ale nie mam wiedzy na temat laravel, każdy może mnie zapytać, dam kod Laravel

Proszę, pomóż mi, bardzo dziękuję

Odpowiedzi

QHarr Oct 27 2020 at 09:54

Spróbuj użyć re.compile i dodaj ''do swojego wyrażenia regularnego, a następnie wyodrębnij pierwszy wynik. Nie testowano z odpowiedzią strony. Najpierw sprawdź, czy ciąg jest rzeczywiście obecny w odpowiedzi.

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