2017-12-13 1 views
0

Auch nach dem Lesen einiger Dokumente, habe ich immer noch Probleme zu verstehen, was Stateful Browser select_form() tut. Nimmt es eine ID oder braucht es einen Namen? Das Formular, das ich verwende, hat keine ID, sondern einen Namen. Will select_form() eine ID oder einen Namen verwenden? Das Formular, das ich verwenden möchte, sieht so aus (keine ID).Auswählen eines Formulars nach Name, keine ID mit mechanicalsoup

<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> 

Ich habe versucht mit

stateful_browser.select_form("#userlogin")

und

stateful_browser.select_form("userlogin")

Es hält werfen diese

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 

UPDATE: Ich habe versucht, mich mit falschen Zugangsdaten auf dieser Website zu authentifizieren, und ich habe den gleichen Fehler bekommen. Ich bin mir nicht sicher, was das bedeutet.

Antwort

1

Nach der Dokumentation bei http://mechanicalsoup.readthedocs.io/en/stable/mechanicalsoup.html?highlight=select_form#mechanicalsoup.StatefulBrowser.select_form

Sie sollten keine Argumente verwenden, um eine Form zu erhalten, wenn es das einzige Formular auf der Seite ist.

Alternativ können Sie CSS-Selektoren:

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

Details von CSS-Selektoren an: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors

+0

Vielen Dank. Die CSS-Selektoren sind, was am Ende für mich funktionierte –

+0

Freut mich zu hören. Bitte markieren Sie dies als akzeptierte Antwort, wenn es für Sie funktioniert. – Phil

Verwandte Themen