Раствор 1
Вместо использования text
используйте innerHTML
. Это вернет вам HTML-код этого элемента, включая текст!
Например, он вернет вам:
"<sup>$</sup>199<sup>99</sup>"
Затем вы можете использовать библиотеку регулярных выражений re
, чтобы получить значение только в середине.
print(re.search('\d+', upfrontCost).group(0))
Выход: 199
Вот код для этого:
from selenium.webdriver import Chrome
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import re
link = "https://www.virginmobile.ca/en/phones/phone-details.html#!/gs9/Grey/64/TR20"
driver = Chrome()
wait = WebDriverWait(driver, 15)
driver.get(link)
print('--------------------------- begining ------------------')
planTypeUpfrontCostListRaw = wait.until \
(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.price.ultra.ng-binding.ng-scope')))
for element in planTypeUpfrontCostListRaw:
upfrontCost = element.get_attribute('innerHTML')
upfrontCost = re.search('\d+', upfrontCost).group(0)
print(upfrontCost)
print('--------------------------- END ------------------------')
Выход:
--------------------------- begining ------------------
0
0
199
349
739
1019
--------------------------- END ------------------------
Solution2
Вы все еще можете использовать text
и удалить ненужные данные, используя strip
для $ и удалить последние две цифры.
driver = Chrome()
wait = WebDriverWait(driver, 15)
driver.get(link)
print('--------------------------- begining ------------------')
planTypeUpfrontCostListRaw = wait.until \
(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.price.ultra.ng-binding.ng-scope')))
for element in planTypeUpfrontCostListRaw:
upfrontCost = element.text.strip('$')
if upfrontCost != '0':
upfrontCost = upfrontCost[:-2]
print(upfrontCost)
print('--------------------------- END ------------------------')