Python, mechanize - 根据名称查找表单的问题

4 投票
1 回答
7537 浏览
提问于 2025-04-17 01:03
import urllib
import cookielib
import mechanize

url = "http://hattrick.org/World/Transfers/"

cookie = cookielib.CookieJar()
browser = mechanize.Browser()

browser.set_cookiejar(cookie)
browser.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

browser.open(url)
browser.select_form(name="aspnetForm")
browser.form['ctl00$ctl00$CPContent$ucSubMenu$ucLogin$txtUserName'] = 'login8192'
browser.form['ctl00$ctl00$CPContent$ucSubMenu$ucLogin$txtPassword'] = '8192login'

response = browser.submit()

browser.select_form(name="aspnetForm")


#<select name="ctl00$ctl00$CPContent$CPMain$ddlSkill1" id="ctl00_ctl00_CPContent_CPMain_ddlSkill1" class="skillDropDown" style="width:120px;">

#control=browser.form.find_control("ctl00$ctl00$CPContent$CPMain$ddlSkill1")# <--- here is the problem

#<select name="ctl00$ctl00$CPContent$CPMain$ddlSkill1Min" id="ctl00_ctl00_CPContent_CPMain_ddlSkill1Min"
#onchange="primaryMinSelected('ctl00_ctl00_CPContent_CPMain_ddlSkill1Min', 'ctl00_ctl00_CPContent_CPMain_ddlSkill1Max');"
#onkeyup="primaryMinSelected('ctl00_ctl00_CPContent_CPMain_ddlSkill1Min', 'ctl00_ctl00_CPContent_CPMain_ddlSkill1Max');" style="width:120px;">

control=browser.form.find_control("ctl00$ctl00$CPContent$CPMain$ddlSkill1Min")
#this works fine

response=browser.submit()

问题是:

control=browser.form.find_control("ctl00$ctl00$CPContent$CPMain$ddlSkill1")

找不到。

---------------------------
Error
---------------------------
ControlNotFoundError: no control matching name 'ctl00$ctl00$CPContent$CPMain$ddlSkill1'
---------------------------
OK   
---------------------------

1 个回答

7

你可以通过使用浏览器的 forms() 迭代器来查看有哪些表单可用。想要在 Python 解释器中查看可用的表单,只需这样做:

>>> print [form for form in browser.forms()][0]

撰写回答