无法在ASP.NET页面上使用Python的Mechanize选择下拉框中的项目

0 投票
1 回答
722 浏览
提问于 2025-04-17 07:26

我有一个ASP.NET页面(链接在这里:http://www.kraftrecipes.com/Products/ProductMain.aspx),上面有一个下拉框,里面有各种食品品牌。我想用Python中的Mechanize库来点击列表里的每个项目,进入产品列表页面,最后用BeautifulSoup来抓取产品信息。以下是一些HTML代码:

<fieldset  class="pulldownfieldset">

    <label>...or use the pulldown menu below.</label>

    <select name="ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand"
            id="ctl00_SPWebPartManager1_g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5_ctl01_ddlBrand"
            onkeypress="return doSubmit(event, 'ctl00_SPWebPartManager1_g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5_ctl01_btnBrandGo');">

    <option value="322">Arrowroot</option>

    <option value="1">A.1. Steak Sauces and Marinades</option>
    etc.

一开始我只是尝试选择表单,但Python提示说这个表单不存在。

browser.select_form("ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand")

当我这样做的时候:

browser.select_form(nr=0)
print browser.form

我得到了所有表单的列表,但用browser.form.name得到的结果是"aspnetForm",这让我觉得Mechanize把页面上的所有东西都当成了一个大表单。如果真是这样,我该怎么获取下拉框里的选项并提交呢?

如果你需要更多信息,请告诉我。

谢谢。

1 个回答

0

页面上只有一个表单。你想要的是一些控件。试试这个:

form = browser.forms()[0]
control = form.find_control(name="ctl00$SPWebPartManager1$g_9bdf5859_9c73_4144_8b6a_9a3b3df417d5$ctl01$ddlBrand")

撰写回答