334 # check that url isn't in __never |
334 # check that url isn't in __never |
335 if url.toString() in self.__never: |
335 if url.toString() in self.__never: |
336 return |
336 return |
337 |
337 |
338 # check the request type |
338 # check the request type |
339 v = request.attribute(QNetworkRequest.User + 101) |
339 navType = request.attribute(QNetworkRequest.User + 101) |
340 if not v.isValid(): |
340 if navType is None: |
341 return |
341 return |
342 navType = v.toInt()[0] |
|
343 if navType != QWebPage.NavigationTypeFormSubmitted: |
342 if navType != QWebPage.NavigationTypeFormSubmitted: |
344 return |
343 return |
345 |
344 |
346 # determine the QWebPage |
345 # determine the QWebPage |
347 v = request.attribute(QNetworkRequest.User + 100) |
346 webPage = request.attribute(QNetworkRequest.User + 100) |
348 webPage = v.toPyObject() |
347 if webPage is None: |
349 if webPage == NotImplemented or webPage is None: |
|
350 return |
348 return |
351 |
349 |
352 # determine the requests content type |
350 # determine the requests content type |
353 contentTypeHeader = request.rawHeader("Content-Type") |
351 contentTypeHeader = request.rawHeader("Content-Type") |
354 if contentTypeHeader.isEmpty(): |
352 if contentTypeHeader.isEmpty(): |
442 key = arg[0] |
440 key = arg[0] |
443 value = arg[1].replace("+", " ") |
441 value = arg[1].replace("+", " ") |
444 args.add((key, value)) |
442 args.add((key, value)) |
445 |
443 |
446 # extract the forms |
444 # extract the forms |
447 lst = webPage.mainFrame().evaluateJavaScript(parseForms_js).toList() |
445 lst = webPage.mainFrame().evaluateJavaScript(parseForms_js) |
448 for formVariant in lst: |
446 for map in lst: |
449 map = formVariant.toMap() |
|
450 formHasPasswords = False |
447 formHasPasswords = False |
451 formName = map["name"].toString() |
448 formName = map["name"] |
452 formIndex = map["index"].toInt()[0] |
449 formIndex = map["index"] |
453 elements = map["elements"].toList() |
450 elements = map["elements"] |
454 formElements = set() |
451 formElements = set() |
455 formElementTypes = {} |
452 formElementTypes = {} |
456 deadElements = set() |
453 deadElements = set() |
457 for element in elements: |
454 for elementMap in elements: |
458 elementMap = element.toMap() |
455 name = elementMap["name"] |
459 name = elementMap["name"].toString() |
456 value = elementMap["value"] |
460 value = elementMap["value"].toString() |
457 type_ = elementMap["type"] |
461 type_ = elementMap["type"].toString() |
|
462 if type_ == "password": |
458 if type_ == "password": |
463 formHasPasswords = True |
459 formHasPasswords = True |
464 t = (name, value) |
460 t = (name, value) |
465 try: |
461 try: |
466 if elementMap["autocomplete"].toString() == "off": |
462 if elementMap["autocomplete"] == "off": |
467 deadElements.add(t) |
463 deadElements.add(t) |
468 except KeyError: |
464 except KeyError: |
469 pass |
465 pass |
470 if name: |
466 if name: |
471 formElements.add(t) |
467 formElements.add(t) |
542 for element in form.elements: |
538 for element in form.elements: |
543 name = element[0] |
539 name = element[0] |
544 value = element[1] |
540 value = element[1] |
545 |
541 |
546 disabled = page.mainFrame().evaluateJavaScript( |
542 disabled = page.mainFrame().evaluateJavaScript( |
547 'document.forms[%s].elements["%s"].disabled' % (formName, name)).toBool() |
543 'document.forms[%s].elements["%s"].disabled' % (formName, name)) |
548 if disabled: |
544 if disabled: |
549 continue |
545 continue |
550 |
546 |
551 readOnly = page.mainFrame().evaluateJavaScript( |
547 readOnly = page.mainFrame().evaluateJavaScript( |
552 'document.forms[%s].elements["%s"].readOnly' % (formName, name)).toBool() |
548 'document.forms[%s].elements["%s"].readOnly' % (formName, name)) |
553 if readOnly: |
549 if readOnly: |
554 continue |
550 continue |
555 |
551 |
556 type_ = page.mainFrame().evaluateJavaScript( |
552 type_ = page.mainFrame().evaluateJavaScript( |
557 'document.forms[%s].elements["%s"].type' % (formName, name)).toString() |
553 'document.forms[%s].elements["%s"].type' % (formName, name)) |
558 if type_ == "" or \ |
554 if type_ == "" or \ |
559 type_ in ["hidden", "reset", "submit"]: |
555 type_ in ["hidden", "reset", "submit"]: |
560 continue |
556 continue |
561 if type_ == "password": |
557 if type_ == "password": |
562 value = Utilities.pwDecode(self.__logins[key][1]) |
558 value = Utilities.pwDecode(self.__logins[key][1]) |