我有一个类似的问题选择机械化表单中的未命名文本字段(python) https://stackoverflow.com/questions/4787907/selecting-an-unnamed-text-field-in-a-mechanize-form-python and 使用mechanize提交没有控件名称的表单 https://stackoverflow.com/questions/13965285/use-mechanize-to-submit-form-without-control-name/14009072#14009072 .
我想在登录屏幕后面抓取网站的数据。但是,我不知道如何选择没有名称的表单字段。控件如下所示:
<TextControl(<None>=)>
<PasswordControl(<None>=)>
<CheckboxControl(<None>=[on])>
<SubmitButtonControl(<None>=) (readonly)>>
通常它会说<TextControl(login=)>
,所以我可以使用br.form['login'] = 'mylogin'
但这次我不能,因为我不知道登录字段的名称。
我可以访问表单,但由于我猜测的值而无法填写 TextControl 或 PasswordControl。我的基本代码如下所示:
import mechanize
from bs4 import BeautifulSoup
import urllib2
import cookielib
cj = cookielib.CookieJar()
br = mechanize.Browser()
br.set_cookiejar(cj)
br.set_handle_robots(False)
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
url = "www.example.com"
request = urllib2.Request(url, None, hdr)
response = br.open(request)
forms = [form for form in br.forms()][0]
br.select_form(nr=0)
我尝试过这样的事情:
br.form.find_control(id="id").value = "loginname"
和这个:
forms[0].set_value("new value", nr=0)
这会引发错误,例如mechanize._response.httperror_seek_wrapper: HTTP Error 403: Forbidden
or TypeError: control name must be string-like
。我不知道还能尝试什么。请帮我一下。