使用 mechanicalsoup 按名称而不是 id 选择表单
Selecting a form by name, not id using mechanicalsoup
即使阅读了一些文档,我仍然无法理解 Mechanical soup 的有状态浏览器 select_form()
的功能。它需要一个 ID 还是需要一个名字?我使用的表单没有 ID,只有名称。使用 select_form()
会使用 ID 还是名称?我尝试使用的表单如下所示(无 ID)。
<div class="fsLoginForms">
<div id="fsLoginForm" class="fsLogin" >
<form name="userlogin" action="" method="post">
<p class="fsLoginTitle">Site Login</p>
<p class="fsLoginMessage">Please provide your username and password to log in:</p>
<label for="username">username</label><input type="text" class="fsLoginUser" name="username" placeholder="Username" id="username" maxlength="50" value=""><br>
<label for="password">password</label><input type="password" class="fsLoginPass" name="password" placeholder="Password" id="password" maxlength="50" value="" ><br>
</form>
</div>
</div>
我试过使用
stateful_browser.select_form("#userlogin")
和
stateful_browser.select_form("userlogin")
它一直在抛出这个
Traceback (most recent call last):
File "loginScrape.py", line 25, in <module>
browser.select_form('#userlogin')
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mechanicalsoup/stateful_browser.py", line 175, in select_form
raise LinkNotFoundError()
mechanicalsoup.utils.LinkNotFoundError
更新:我尝试使用不正确的凭据在该网站进行身份验证,但我遇到了同样的错误。我不太清楚这是什么意思。
上的文档
您应该能够不使用任何参数来获取表单,如果它是页面上唯一的表单。
或者,使用 CSS 选择器:
stateful_browser.select_form('form[name="userlogin"]')
CSS 个选择器的详细信息位于:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors
即使阅读了一些文档,我仍然无法理解 Mechanical soup 的有状态浏览器 select_form()
的功能。它需要一个 ID 还是需要一个名字?我使用的表单没有 ID,只有名称。使用 select_form()
会使用 ID 还是名称?我尝试使用的表单如下所示(无 ID)。
<div class="fsLoginForms">
<div id="fsLoginForm" class="fsLogin" >
<form name="userlogin" action="" method="post">
<p class="fsLoginTitle">Site Login</p>
<p class="fsLoginMessage">Please provide your username and password to log in:</p>
<label for="username">username</label><input type="text" class="fsLoginUser" name="username" placeholder="Username" id="username" maxlength="50" value=""><br>
<label for="password">password</label><input type="password" class="fsLoginPass" name="password" placeholder="Password" id="password" maxlength="50" value="" ><br>
</form>
</div>
</div>
我试过使用
stateful_browser.select_form("#userlogin")
和
stateful_browser.select_form("userlogin")
它一直在抛出这个
Traceback (most recent call last):
File "loginScrape.py", line 25, in <module>
browser.select_form('#userlogin')
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mechanicalsoup/stateful_browser.py", line 175, in select_form
raise LinkNotFoundError()
mechanicalsoup.utils.LinkNotFoundError
更新:我尝试使用不正确的凭据在该网站进行身份验证,但我遇到了同样的错误。我不太清楚这是什么意思。
您应该能够不使用任何参数来获取表单,如果它是页面上唯一的表单。
或者,使用 CSS 选择器:
stateful_browser.select_form('form[name="userlogin"]')
CSS 个选择器的详细信息位于:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors