2016-06-22 1 views
0

У меня есть страница входа в систему, которая, как этотформа отправить с помощью Python LXML

<form method="POST" name="DefaultForm" action="SOME_URL" onSubmit="return (isReady(this));" autocomplete="off"> 

<input name="action" type="hidden" value="SOME_VALUE"> 
<input name="serverTimeStamp" type="hidden" value="SOME_VALUE"> 
<input name="clientTimeStamp" type="hidden" value=""> 
<input name="clientIP" type="hidden" value="SOME_VALUE"> 

<TABLE height="400" cellSpacing="0" cellPadding="0" width="540" align="center" background="images/bkground.gif" border="0"> 
... 
<INPUT class="inputStyle" type="Input" name="username" size="20"> 
<INPUT class="inputStyle" type="password" maxLength="28" name="password" size="20"> 
... 
</TABLE> 
</form> 

Использование Python и LXML/Просит модули

session_requests = requests.session() 
result = session_requests.get(url) 
tree = html.fromstring(result.content) 
if tree.find('form') : 
print "do something" 
else : 
print "do something else" 

, но я не смог получить эту работу, то find() всегда возвращает Нет всегда приходит в блок else. Может ли кто-нибудь предложить решение?

ответ

0

Почему вы видите нет потому, что форма является корень элемент:

h = """<form method="POST" name="DefaultForm" action="SOME_URL" onSubmit="return (isReady(this));" autocomplete="off"> 

<input name="action" type="hidden" value="SOME_VALUE"> 
<input name="serverTimeStamp" type="hidden" value="SOME_VALUE"> 
<input name="clientTimeStamp" type="hidden" value=""> 
<input name="clientIP" type="hidden" value="SOME_VALUE"> 

<TABLE height="400" cellSpacing="0" cellPadding="0" width="540" align="center" background="images/bkground.gif" border="0"> 
<INPUT class="inputStyle" type="Input" name="username" size="20"> 
<INPUT class="inputStyle" type="password" maxLength="28" name="password" size="20"> 
</TABLE> 
</form>""" 

x = html.fromstring(h) 
print(x.attrib) 
print(x) 
print(x.find("form")) 

Просто делать выше:

{'action': 'SOME_URL', 'autocomplete': 'off', 'onsubmit': 'return (isReady(this));', 'method': 'POST', 'name': 'DefaultForm'} 
<Element form at 0x7f2b9c28eb50> 
None 

Если обернуть форму в DIV:

h = """<div> 
     <form method="POST" name="DefaultForm" action="SOME_URL" onSubmit="return (isReady(this));" autocomplete="off"> 
<input name="action" type="hidden" value="SOME_VALUE"> 
<input name="serverTimeStamp" type="hidden" value="SOME_VALUE"> 
<input name="clientTimeStamp" type="hidden" value=""> 
<input name="clientIP" type="hidden" value="SOME_VALUE"> 
<TABLE height="400" cellSpacing="0" cellPadding="0" width="540" align="center" background="images/bkground.gif" border="0"> 
<INPUT class="inputStyle" type="Input" name="username" size="20"> 
<INPUT class="inputStyle" type="password" maxLength="28" name="password" size="20"> 
</TABLE> 
</form> 
</div>""" 

from lxml import html 
import lxml.etree as et 
x = html.fromstring(h) 
print x 
print(x.find("form")) 

Теперь div является корнем и найти, находит форму:

<Element div at 0x7f05966b3b50> 
<Element form at 0x7f0597a44ba8> 
+0

Hi Padraic Cunningham, Спасибо за ответ. но страница находится на веб-сервере, поэтому я не могу изменить html. Форма фактически завернутая под HTML и таблицы тега т.е.

...
Gauss

+0

@Gauss, я просто завернул HTML в DIV, чтобы показать вам разницу, когда вы 'печати tree' что вы видите? –

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

  • Нет связанных вопросов^_^