как преобразовать данные текстового поля в целое число в python селен - PullRequest
1 голос
/ 08 января 2020

Я изо всех сил пытаюсь получить текст из текстового поля, преобразовать его в целое число, умножить на 1,2, а затем снова вставить его обратно в текстовое поле. преобразовать его в целое число (даже если в строке просто указано «2000»), поэтому я попытался преобразовать его в число с плавающей точкой и , затем в целое число, но теперь я получаю «ValueError: не удалось преобразовать строку в число с плавающей точкой» '.

Есть идеи, что не так? Я приложу HTML текстового поля и мой python.

HTML:

<input id="radius" ng-model="geoCtrl.lineRadius" 
type="text" placeholder="Desired radius from each point of the list" 
maxlength="100" name="targeting[geolocation][radius]" 
ng-class="{'val-ignore': geoCtrl.options !== 'geo'}" 
class="col-lg-12 attr-input ng-pristine ng-valid">

Python:

#code to find radius, multiply it by 1.2, then enter new radius into textbox
browser.find_element_by_id('radius')
first_radius_20percent = browser.find_element_by_id('radius')
current_radius = float(first_radius_20percent.get_attribute('value'))
current_radius = int(first_radius_20percent.get_attribute('value'))
new_radius = int(current_radius*1.2)
first_radius_20percent.clear()
first_radius_20percent.send_keys(new_radius)

Ответы [ 3 ]

0 голосов
/ 08 января 2020

В соответствии с HTML, которым вы поделились:

<input id="radius" ng-model="geoCtrl.lineRadius" type="text" placeholder="Desired radius from each point of the list" maxlength="100" name="targeting[geolocation][radius]" ng-class="{'val-ignore': geoCtrl.options !== 'geo'}" class="col-lg-12 attr-input ng-pristine ng-valid">

Я не вижу value например 2000 , но placeholder как Желаемый радиус из каждой точки списка внутри элемента. Однако, согласно вашему вопросу, так как элемент является элементом Angular, поэтому для извлечения value элемента вам нужно вызвать WebDriverWait для element_to_be_clickable(). * 1016. *

Кроме того, поскольку вы должны умножить извлеченное значение на 1.2 , было бы лучше преобразовать значение, возвращаемое из get_attribute() в float, но при вызове send_keys() вы должны преобразовать в a string снова, и вы используете следующее решение:

  • Кодовый блок:

    driver.get('https://www.google.com/')
    first_radius_20percent = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.NAME, "q")))
    # current_float_radius = float(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "radius"))).get_attribute('value'))
    # or
    # current_float_radius = float(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#radius"))).get_attribute('value'))
    current_float_radius = float("2000")
    new_radius = float(current_float_radius*1.2)
    first_radius_20percent.send_keys(str(new_radius))
    

Снимок браузера:

float

0 голосов
/ 08 января 2020

так что решение не было проблемой с типом данных, мой код извлекал значение для текстового поля, как только оно загружалось, но «2000» заполнялся только через полсекунды или около того. Решение, которое я нашел, состояло в том, чтобы просто добавить задержку перед выполнением рассматриваемого сценария python.

Спасибо за помощь, хотя!

0 голосов
/ 08 января 2020

В возвращаемом значении могут быть смешанные символы Юникода, избавиться от них можно с помощью encode('ascii', 'ignore')

current_radius = int(first_radius_20percent.get_attribute('value').encode('ascii', 'ignore'))
...