Вам не нужен селен.Инструкции по применению содержимого, которое присваивает псевдо элементам их значения, приведены в инструкциях стиля CSS:
Здесьбуквенные строки 2/3 после .icon-
, например acb
отображаются на элементы span
, в которых хранится ваш контент before
.Значения после \9d0
равны + 1 от показанного фактического значения.Вы можете создать словарь из этих пар значений (с корректировкой), чтобы декодировать число в каждом before
из значения класса span
.
Пример того, как 2/3 буквенных строк отображаются на содержимое:
Мой метод, возможно, немного многословен, так как я не настолько знаком с Python, но логика должна быть ясной.
import requests
import re
from bs4 import BeautifulSoup
url = 'https://www.justdial.com/Bangalore/Spardha-Mithra-IAS-KAS-Coaching-Centre-Opposite-Maruthi-Medicals-Vijayanagar/080PXX80-XX80-140120184741-R6P8_BZDET?xid=QmFuZ2Fsb3JlIEJhbmsgRXhhbSBUdXRvcmlhbHM='
res = requests.get(url, headers = {'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(res.content, 'lxml')
cipherKey = str(soup.select('style[type="text/css"]')[1])
keys = re.findall('-(\w+):before', cipherKey, flags=0)
values = [int(item)-1 for item in re.findall('9d0(\d+)', cipherKey, flags=0)]
cipherDict = dict(zip(keys,values))
cipherDict[list(cipherDict.keys())[list(cipherDict.values()).index(10)]] = '+'
decodeElements = [item['class'][1].replace('icon-','') for item in soup.select('.telCntct span[class*="icon"]')]
telephoneNumber = ''.join([str(cipherDict.get(i)) for i in decodeElements])
print(telephoneNumber)