按名称选择表单,而不是使用mechanicalsoup的id

时间:2017-12-13 15:27:39

标签: python mechanicalsoup

即使在阅读了一些文档之后,我仍然无法理解机械汤有状态浏览器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

更新:我尝试使用不正确的凭据对该网站进行身份验证,但我收到了同样的错误。我不太清楚这意味着什么。

1 个答案:

答案 0 :(得分:2)

根据http://mechanicalsoup.readthedocs.io/en/stable/mechanicalsoup.html?highlight=select_form#mechanicalsoup.StatefulBrowser.select_form

的文件

如果表单是页面上唯一的表单,您应该可以不使用任何参数来获取表单。

或者,使用CSS选择器:

stateful_browser.select_form('form[name="userlogin"]')

CSS选择器的详情:https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors