使用Mechanize定位Palo Alto SSO登录页用户名字段失败求助
自动化登录Palo Alto Networks支持站点遇到的表单定位问题
我尝试自动化访问https://support.paloaltonetworks.com/,该网站需先在https://sso.paloaltonetworks.com/完成登录。已通过以下代码成功打开站点:
import re import mechanize br = mechanize.Browser() br.set_handle_robots(False) br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] br.open("https://paloaltonetworks.com/") print(br)
但尝试定位用户名/邮箱字段填写内容时,始终出现错误。我添加以下代码查找表单:
formcount=0 for frm in br.forms(): if str(frm.attrs["id"])=="username": break formcount=formcount+1 br.select_form(nr=formcount)
得到如下报错:
Traceback (most recent call last): File "scraper_mechanize.py", line 20, in <module> br.select_form(nr=formcount) File "/home/tdadmin/testing/Python/PaloAlto/grabdata/lib64/python3.6/site-packages/mechanize/_mechanize.py", line 681, in select_form raise FormNotFoundError("no form matching " + description) mechanize._mechanize.FormNotFoundError: no form matching nr 0
随后我尝试以下代码遍历表单,却没有任何输出:
for form in br.forms(): print("Form name:", form.name) print(form)
但在页面源码中,我找到了用户名输入字段:
<input type="text" placeholder="" name="username" id="idp-discovery-username" value="" aria-label="" autocomplete="username" aria-required="true" required="" data-keeper-lock-id="k-o4yd510ha7">
该字段属于如下完整表单结构:
<form novalidate="novalidate" method="POST" action="/" data-se="o-form" slot="content" id="form19" class="idp-discovery-form o-form o-form-edit-mode"><div data-se="o-form-content" class="o-form-content o-form-theme clearfix"><h2 data-se="o-form-head" class="okta-form-title o-form-head">Sign In</h2><div class="o-form-error-container" data-se="o-form-error-container"></div><div class="o-form-fieldset-container" data-se="o-form-fieldset-container"><div data-se="o-form-fieldset" class="o-form-fieldset o-form-label-top margin-btm-30"><div data-se="o-form-label" class="okta-form-label o-form-label"><label for="idp-discovery-username">Email </label></div><div data-se="o-form-input-container" class="o-form-input"><span data-se="o-form-input-username" class="o-form-input-name-username o-form-control okta-form-input-field input-fix"><input type="text" placeholder="" name="username" id="idp-discovery-username" value="" aria-label="" autocomplete="username" aria-required="true" required="" data-keeper-lock-id="k-o4yd510ha7"><keeper-lock class="focus-visible keeper-lock-disabled" tabindex="-1" id="k-o4yd510ha7" aria-label="Open Keeper Popup" role="button" style="background-image: url("chrome-extension://bfogiafebfohielmmehodmfbbebbbpei/images/ico-field-fill-lock-disabled.svg") !important; background-size: 24px 24px !important; cursor: pointer !important; width: 24px !important; position: absolute !important; opacity: 1 !important; margin-top: auto !important; min-width: 24px !important; top: 7px; left: 281px; z-index: 1; padding: 0px; animation-name: none; height: 24px !important"></keeper-lock></span></div></div><div data-se="o-form-fieldset" class="o-form-fieldset o-form-label-top margin-btm-0"><div data-se="o-form-input-container" class="o-form-input"><span data-se="o-form-input-remember" class="o-form-input-name-remember"><div class="custom-checkbox"><input type="checkbox" name="remember" id="input34"><label for="input34" data-se-for-name="remember" class="">Remember me</label></div></span></div></div></div></div><div class="o-form-button-bar"><input class="button button-primary" type="submit" value="Next" id="idp-discovery-submit" data-type="save"></div></form>
这表明页面存在id为form19的表单,但Mechanize无法识别或定位它。请问是否可以通过Mechanize定位特定HTML标签,还是必须使用BeautifulSoup?作为Mechanize新手,我尝试了多种搜索到的方法但均未成功。
内容的提问来源于stack exchange,提问作者Bokkie
相关产品推荐
相关产品推荐

