Как получить цену в виде числа с веб-сайта, используя Selenium и Python - PullRequest
1 голос
/ 16 июня 2020

Я создаю бота, который автоматизирует мою работу и копирует определенные значения с определенного веб-сайта. Все работает нормально, но последние строки моего кода, в котором говорится, что w.text, дают результат - текст, и мне нужно число. Каждый элемент, значение которого мне нужно, после проверки выглядит следующим образом:

<span class="good">€25,217.65</span>

Как мне получить значение в виде числа, а не в виде текста? Я пробовал w.value или w.get_attribute ('value), но это не сработало. Вот моя программа (без скачиваний библиотек и файлов)

driver = webdriver.Chrome(driver_path)   
driver.get('https://seabass-admin.igp.cloud/')   
# waiting for login table to load
try:
    element = WebDriverWait(driver,10).until(
    ec.presence_of_element_located((By.XPATH,'//*[@id="email"]'))
    )
except:
    driver.quit()

#entering sensitive info
driver.find_element_by_id("email").send_keys(pwx.em)                                  # login details
driver.find_element_by_id("password").send_keys(pwx.pw)                               # password 
details
driver.find_element_by_xpath('//*[@id="appContainer"]/div/form/button').click()       # click sign in

# waiting for page to load
try:
    element = WebDriverWait(driver,10).until(
    ec.presence_of_element_located((By.XPATH,'//* 
[@id="testing"]/section/section[4]/div/table/tbody/tr[2]/td[3]/span'))
    )
except:
    driver.quit()

# getting info from the page
w = driver.find_element_by_xpath('//* 
[@id="testing"]/section/section[4]/div/table/tbody/tr[2]/td[3]/span')
cell = outcome['import']
cell[withdrawal_cell].value = w.text

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Для этого вы можете использовать некоторые из встроенных функций Python:

  1. str.strip () , чтобы удалить любой начальный или конечный символ '€', затем
  2. str.replace () , чтобы удалить ',' (заменить ее пустой строкой '')

В частности:

str_w = w.text  # this is the '€25,217.65' string
digits=str_w.strip('€').replace(',','')     # use the functions above to get number-like string
cell[withdrawal_cell].value = float(digits)   # convert to float number
0 голосов
/ 16 июня 2020

Согласно HTML, которым вы поделились:

<span class="good">€25,217.65</span>

Текст 25 217,65 € - это внутренний HTML.

Итак, вы можете извлечь текст 25 217,65 € , используя:

  • w.get_attribute("innerHTML")
  • текст атрибут.

Теперь, чтобы получить значение 25 217,65 € в виде числа вместо текста, вам нужно:

  • Удалить символы и , используя re.sub():

    import re
    
    string = "€25,217.65"
    my_string = re.sub('[€,]', '', string)
    
  • Наконец, чтобы преобразовать строку в float , вам нужно передать строку в качестве аргумента в float() следующим образом:

    my_number = float(my_string)
    

Итак, вся операция в одной строке:

import re

string = "€25,217.65"       
print(float(re.sub('[€,]', '', string)))

Фактически, ваша строка кода может быть любой из следующее:

  • Используя текст атрибут:

    cell[withdrawal_cell].value = float(re.sub('[€,]', '', w.text))
    
  • Используя get_attribute("innerHTML"):

    cell[withdrawal_cell].value = float(re.sub('[€,]', '', w.get_attribute("innerHTML")))
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...