计算器! 我最近在主要使用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模块但是它没有工作,所以我删除了那段代码。