2013-12-22 2 views
0

Мне нужно найти все формы типа «login-form» на странице html. Требование для этого состоит в том, что оно содержит поле ввода текста, поле пароля и кнопку (отправить или просто кнопку).xpath шаблон для всех конкретных форм на странице html

Не должно упоминаться ни одного имени элемента, поскольку оно должно работать через различные языковые мутации.

И мне нужно найти все формы на странице, которая соответствует этим требованиям. Я думаю, это можно сделать с помощью xpath, но я не могу понять какой-либо рабочий шаблон.

Кстати, я использую webdriver с python.

+0

Какие модели, которые у вас есть попытки до сих пор? Почему они не работали? Не могли бы вы включить в свой вопрос свои попытки и возможные сообщения об ошибках? Также нам нужно было бы убрать! введите HTML-страницу для работы. В противном случае это просто догадки. –

ответ

2

Так что вам нужно выражение XPath, чтобы соответствовать каждый form элемент (//form), который имеет среди своих потомков в input элемент type=password ([.//input[@type='password']]), стандартное input поле ([.//input[not(@type) or @type='' or @type='text']]) и кнопку отправки ([.//input[@type='submit'] or .//button[not(@type) or @type='' or @type='submit']]).

Все вместе становится

//form[.//input[@type='password']][.//input[not(@type) or @type='' or @type='text']][.//input[@type='submit'] or .//button[not(@type) or @type='' or @type='submit']] 

Это не может соответствовать любой форме, так как для кнопки и поле ввода текста представить это трудно сделать всегда работает правило. Проблема, связанная с такими элементами, заключается в том, что они имеют много значений type, и если в ней указан недопустимый тип, то они по умолчанию соответствуют состоянию text или submit. Например, элемент ввода my имеет атрибут type, установленный на nonvalidtype, и он все равно будет стандартным вводом текста.

Кроме того, атрибут type чувствителен к регистру, и правильное выражение XPath, что считает это более сложная, она также нуждается в XPath 2.0:

//form[.//input[lower-case(@type)='password']][.//input[not(@type) or @type='' or lower-case(@type)='text']][.//input[lower-case(@type)='submit'] or .//button[not(@type) or @type='' or lower-case(@type)='submit']] 
+0

Спасибо, это может быть то, что я ищу. Я согласен с тем, что, вероятно, никакой подход не будет охватывать 100% случаев, которые мне нужны. – dakov

Смежные вопросы