From 3fef8ee45f69a62b8df5c0afdf516b9ba7c32795 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 15 Oct 2014 10:40:15 +0530 Subject: [PATCH] Allow using a QWebElement to select forms directly --- src/calibre/web/jsbrowser/forms.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/calibre/web/jsbrowser/forms.py b/src/calibre/web/jsbrowser/forms.py index 637412780e..52273abc21 100644 --- a/src/calibre/web/jsbrowser/forms.py +++ b/src/calibre/web/jsbrowser/forms.py @@ -187,8 +187,10 @@ class FormsMixin(object): def __init__(self): self.current_form = None - def find_form(self, css2_selector=None, nr=None): + def find_form(self, css2_selector=None, nr=None, qwebelement=None): mf = self.page.mainFrame() + if qwebelement is not None: + return Form(qwebelement) if css2_selector is not None: candidate = mf.findFirstElement(css2_selector) if not candidate.isNull(): @@ -206,7 +208,7 @@ class FormsMixin(object): mf = self.page.mainFrame() return list(map(Form, mf.findAllElements('form').toList())) - def select_form(self, css2_selector=None, nr=None): + def select_form(self, css2_selector=None, nr=None, qwebelement=None): ''' Select a form for further processing. Specify the form either with css2_selector or nr. Raises ValueError if no matching form is found. @@ -216,8 +218,10 @@ class FormsMixin(object): :param nr: An integer >= 0. Selects the nr'th form in the current page. + :param qwebelement: A QWebElement, useful is CSS selectors are insufficient + ''' - self.current_form = self.find_form(css2_selector=css2_selector, nr=nr) + self.current_form = self.find_form(css2_selector=css2_selector, nr=nr, qwebelement=qwebelement) if self.current_form is None: raise ValueError('No such form found') return self.current_form