diff --git a/weboob/browser/filters/html.py b/weboob/browser/filters/html.py
index 5ab7bfa6b631cbdf8b5a2ed74af0f2fce96843bc..889476f76fe51e5ab8417756465927227aa18586 100644
--- a/weboob/browser/filters/html.py
+++ b/weboob/browser/filters/html.py
@@ -17,6 +17,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
+from decimal import Decimal
import lxml.html as html
from six.moves.html_parser import HTMLParser
@@ -185,7 +186,16 @@ def filter(self, el):
return unicode(el.attrib['value'])
except KeyError:
return self.default_or_raise(AttributeNotFound('Element %s does not have attribute value' % el))
- # TODO handle html5 number, datetime, etc.
+ # numeric input
+ elif el.attrib.get('type', '') in ('number', 'range'):
+ try:
+ if '.' in el.attrib.get('step', ''):
+
+ return Decimal(el.attrib['value'])
+ else:
+ return int(el.attrib['value'])
+ except KeyError:
+ return self.default_or_raise(AttributeNotFound('Element %s does not have attribute value' % el))
else:
raise UnrecognizedElement('Element %s is not recognized' % el)
elif el.tag == 'textarea':
diff --git a/weboob/browser/tests/filters.py b/weboob/browser/tests/filters.py
index 1436a607f5b156342497b67207313e65ad3554f1..ce12e898be2f63c65ac02ab02a9574b44e8eeabe 100644
--- a/weboob/browser/tests/filters.py
+++ b/weboob/browser/tests/filters.py
@@ -15,10 +15,12 @@
#
# You should have received a copy of the GNU Lesser General Public License
# along with weboob. If not, see .
+
+from decimal import Decimal
from unittest import TestCase
from lxml.html import fromstring
-from weboob.browser.filters.html import Link
+from weboob.browser.filters.html import FormValue, Link
from weboob.browser.filters.standard import RawText
@@ -51,6 +53,29 @@ def test_first_node_is_element_recursive(self):
self.assertEqual("229,90 EUR", RawText('//p', default="foo", children=True)(e))
+class FormValueTest(TestCase):
+ def setUp(self):
+ self.e = fromstring('''
+
+ ''')
+
+ def test_value(self):
+ self.assertEqual('bonjour', FormValue('//form//input[@name="test_text"]')(self.e))
+ self.assertEqual(5, FormValue('//form//input[@name="test_number1"]')(self.e))
+ self.assertEqual(Decimal('0.05'), FormValue('//form//input[@name="test_number2"]')(self.e))
+ self.assertEqual(True, FormValue('//form//input[@name="test_checkbox1"]')(self.e))
+ self.assertEqual(False, FormValue('//form//input[@name="test_checkbox2"]')(self.e))
+ self.assertEqual(20, FormValue('//form//input[@name="test_range"]')(self.e))
+
+
class LinkTest(TestCase):
def test_link(self):
e = fromstring('Google')