Как я могу очистить элемент :: before на сайте, используя селен питон - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь очистить номер телефона с этого сайта, используя селен.Я обнаружил, что класс "tel ttel", но когда я пытаюсь почистить сайт с помощью find_element_by_xpath.Я получаю пустую строку.

Мой код:

wd = webdriver.Chrome(chrome_path)
url = 'https://www.justdial.com/Bangalore/Spardha-Mithra-IAS-KAS-Coaching-Centre-Opposite-Maruthi-Medicals-Vijayanagar/080PXX80-XX80-140120184741-R6P8_BZDET?xid=QmFuZ2Fsb3JlIEJhbmsgRXhhbSBUdXRvcmlhbHM='
wd.get(url)
phone = wd.find_element_by_xpath('//a[@class="tel ttel"]').text
print(phone)

Вывод:

''

Номер телефона:находится здесь: Phone-number

Элемент проверки для номера телефона: Inspect Element

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы также можете получить контент :before из вычисленного стиля:

chars = driver.execute_script("return [...document.querySelectorAll('.telCntct a.tel span')].map(span => window.getComputedStyle(span,':before').content)")

Но в этом случае у вас останется странный юникод-контент, который вам затем придется сопоставить с числами.

0 голосов
/ 07 декабря 2018

Вам не нужен селен.Инструкции по применению содержимого, которое присваивает псевдо элементам их значения, приведены в инструкциях стиля CSS:

enter image description here

Здесьбуквенные строки 2/3 после .icon-, например acb отображаются на элементы span, в которых хранится ваш контент before.Значения после \9d0 равны + 1 от показанного фактического значения.Вы можете создать словарь из этих пар значений (с корректировкой), чтобы декодировать число в каждом before из значения класса span.

Пример того, как 2/3 буквенных строк отображаются на содержимое:

enter image description here

Мой метод, возможно, немного многословен, так как я не настолько знаком с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...