我正在使用python進行機械化。使用ID機械化選擇表格
<form action="/monthly-reports" accept-charset="UTF-8" method="post" id="sblock">
此處的表格沒有名稱。我怎樣才能解析表單使用它的id
?
我正在使用python進行機械化。使用ID機械化選擇表格
<form action="/monthly-reports" accept-charset="UTF-8" method="post" id="sblock">
此處的表格沒有名稱。我怎樣才能解析表單使用它的id
?
嘗試:
[f.id for f in br.forms()]
應該從你的頁面
我發現這是針對同一問題的解決方案。 br
是機械化對象:
formcount=0
for frm in br.forms():
if str(frm.attrs["id"])=="sblock":
break
formcount=formcount+1
br.select_form(nr=formcount)
我敢肯定,循環計數器上述方法可以做更Python,但這應該與屬性id="sblock"
選擇形式。
提高對python412524的例子了一下,文檔指出,這是有效的,以及,我覺得有點清潔:
for form in br.forms():
if form.attrs['id'] == 'sblock':
br.form = form
break
某些表單沒有ID。在if語句中使用'form.attrs.get('id')'可以避免KeyError。 – awatts
任何未來的觀衆,這裏是一個使用predicate
論點的另一個版本。請注意,這可能被製作成具有拉姆達單行線,如果你是這樣的傾向:
def is_sblock_form(form):
return "id" in form.attrs and form.attrs['id'] == "sblock"
br.select_form(predicate=is_sblock_form)
來源:https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462
g_form_id = ""
def is_form_found(form1):
return "id" in form1.attrs and form1.attrs['id'] == g_form_id
def select_form_with_id_using_br(br1, id1):
global g_form_id
g_form_id = id1
try:
br1.select_form(predicate=is_form_found)
except mechanize.FormNotFoundError:
print "form not found, id: " + g_form_id
exit()
# ... goto the form page, using br = mechanize.Browser()
# now lets select a form with id "user-register-form", and print its contents
select_form_with_id_using_br(br, "user-register-form")
print br.form
# that's it, it works! upvote me if u like
您可以使用瀏覽器的功能select_form的謂語PARAM類。就像這樣:
from mechanize import Browser, FormNotFoundError
try:
br.select_form(predicate=lambda frm: 'id' in frm.attrs and frm.attrs['id'] == 'sblock')
except FormNotFoundError:
print("ERROR: Form not Found")
感謝,但它是writtening空白列表 – sam