Mechanize无法在我的网页上找到任何表单

时间:2014-10-14 16:08:55

标签: python mechanize autologin

计算器! 我最近在主要使用C ++和Java几年后开始学习Python,我想通过制作一个非常方便的程序来测试我的知识。

你知道,我的学校使用在线日程安排服务Magister为我们提供在学校的日常约会,并告诉我们我们在什么时间有什么课程。

现在,我认为如果我有一个Windows Widget在我的桌面上显示我的日程安排会非常方便。 我稍微研究了windows小部件,并决定我最好使用python来完成任务,并且遇到了机械化库。

我已经写了一些代码,但是有一个问题,因为程序似乎找不到任何形式!我在开发人员控制台中使用了一些javascript来检查页面上有多少表单,而且只有一个用于登录,但它没有任何类型的名称,只是一个类,所以我尝试过使用

browser.select_form(nr=0)

但这给了我一个FormNotFoundException,所以我尝试了 br.select_form(predicate=lambda f: f.attrs.get('class') == 'FormClassName')而是,这给了我同样的例外。

我尝试机械化打印页面上的所有表单,但它只打印了一个空列表。

知道问题可能是什么,更重要的是,我如何解决它?

提前致谢!

修改 -

表格的HTML:

 <form class="ng-pristine ng-invalid ng-invalid-required">
            <fieldset legend="">
                <div>
                    <label for="username">Username</label>
                    <input class="type-text ng-pristine ng-valid ng-valid-required" type="text" name="username" id="username" data-ng-model="credentials.Username" required="required" data-on-keyup="onLogin()" data-keys="[13]" tabindex="1" autocapitalize="off" data-sm-focus="false" data-sm-auto-fill="credentials.Username">
                </div>
                <div>
                    <label for="password">Password</label>
                    <input class="type-text ng-pristine ng-invalid ng-invalid-required" type="password" name="password" id="password" data-ng-model="credentials.Password" required="required" data-on-keyup="onLogin()" data-keys="[13]" tabindex="2" data-sm-focus="true" data-sm-auto-fill="credentials.Password">
                </div>
                <div class="btn-row">
                    <span class="check">
                        <input type="checkbox" class="checkbox ng-pristine ng-valid" name="remember" data-ng-model="credentials.Usernameremember" id="remember" tabindex="3"><label for="remember"><span></span>Remember username</label>
                    </span>
                    <a class="btn-pri" data-ng-click="onLogin()" tabindex="3">Inloggen</a>
                </div>
                <a class="end-link ng-hide" title="Please choose a different school" data-ng-show="showScholenkiezer" tabindex="4" href="magister://doorstarten_blokkeren=1">Please choose a different school</a>
                <a class="end-link account ng-hide" title="Can't access your account?" tabindex="4" data-ng-show="schoolinformatie.ToonPasswordVergetenOptie" data-ng-click="onForgotPassword();">Can't access your account?</a>
            </fieldset>
        </form>

页面的其余部分主要由一般样式组成,因为它只是一个登录页面。 关于问题可能是什么的任何线索?

编辑2 -

此外,这是我尝试使用的机械化代码:

if __name__ == '__main__':

browser = Browser()
browser.open('SiteURL')
browser.select_form(nr = 0) # Or browser.select_form(predicate=lambda f: f.attrs.get('class') == 'ng-pristine ng-invalid ng-invalid-required') but that didn't work either
browser.form['username'] = 'Username'
browser.form['password'] = 'Password'
browser.submit()

Stackoverflow不会保留缩进,但它会在那里。 我已经尝试过使用selenium webdriver模块但是它没有工作,所以我删除了那段代码。

0 个答案:

没有答案