【问题标题】:how to send post request for forms without action?如何在不采取行动的情况下发送表单的发布请求?
【发布时间】:2017-08-21 03:11:24
【问题描述】:

所以我试图用我在 python 中的代码登录 Spotify,但问题是我找不到我应该将请求发布到的 url,因为表单中没有 action 属性。 login url

这是表单代码:

  <form _lpchecked="1" class="ng-valid-sp-disallow-chars ng-dirty ng-valid-parse ng-valid ng-valid-required" name="$parent.accounts" ng-submit="submit(form)" novalidate="">
   <!-- ngIf: status && status !== 200 -->
   <div class="row" ng-class="{'has-error': (accounts.username.$dirty &amp;&amp; accounts.username.$invalid)}">
    <div class="col-xs-12">
     <label class="control-label sr-only ng-binding" for="login-username">
      Username or email address
     </label>
     <input autocapitalize="off" autocomplete="off" autocorrect="off" autofocus="autofocus" class="form-control input-with-feedback ng-pristine ng-untouched ng-valid ng-valid-sp-disallow-chars ng-not-empty ng-valid-required" id="login-username" name="username" ng-model="form.username" ng-trim="false" placeholder="Username or email address" required="" sp-disallow-chars=":%&amp;'`´&quot;" sp-disallow-chars-model="usernameDisallowedChars" style='background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAUBJREFUOBGVVE2ORUAQLvIS4gwzEysHkHgnkMiEc4zEJXCMNwtWTmDh3UGcYoaFhZUFCzFVnu4wIaiE+vvq6+6qTgthGH6O4/jA7x1OiCAIPwj7CoLgSXDxSjEVzAt9k01CBKdWfsFf/2WNuEwc2YqigKZpK9glAlVVwTTNbQJZlnlCkiTAZnF/mePB2biRdhwHdF2HJEmgaRrwPA+qqoI4jle5/8XkXzrCFoHg+/5ICdpm13UTho7Q9/0WnsfwiL/ouHwHrJgQR8WEwVG+oXpMPaDAkdzvd7AsC8qyhCiKJjiRnCKwbRsMw9hcQ5zv9maSBeu6hjRNYRgGFuKaCNwjkjzPoSiK1d1gDDecQobOBwswzabD/D3Np7AHOIrvNpHmPI+Kc2RZBm3bcp8wuwSIot7QQ0PznoR6wYSK0Xb/AGVLcWwc7Ng3AAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;' type="text"/>
     <!-- ngIf: accounts.username.$dirty && accounts.username.$invalid -->
    </div>
   </div>
   <div class="row" ng-class="{'has-error': (accounts.password.$dirty &amp;&amp; accounts.password.$invalid)}">
    <div class="col-xs-12">
     <label class="control-label sr-only ng-binding" for="login-password">
      Password
     </label>
     <input autocomplete="off" class="form-control input-with-feedback ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" id="login-password" name="password" ng-model="form.password" ng-trim="false" placeholder="Password" required="" style='background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAUBJREFUOBGVVE2ORUAQLvIS4gwzEysHkHgnkMiEc4zEJXCMNwtWTmDh3UGcYoaFhZUFCzFVnu4wIaiE+vvq6+6qTgthGH6O4/jA7x1OiCAIPwj7CoLgSXDxSjEVzAt9k01CBKdWfsFf/2WNuEwc2YqigKZpK9glAlVVwTTNbQJZlnlCkiTAZnF/mePB2biRdhwHdF2HJEmgaRrwPA+qqoI4jle5/8XkXzrCFoHg+/5ICdpm13UTho7Q9/0WnsfwiL/ouHwHrJgQR8WEwVG+oXpMPaDAkdzvd7AsC8qyhCiKJjiRnCKwbRsMw9hcQ5zv9maSBeu6hjRNYRgGFuKaCNwjkjzPoSiK1d1gDDecQobOBwswzabD/D3Np7AHOIrvNpHmPI+Kc2RZBm3bcp8wuwSIot7QQ0PznoR6wYSK0Xb/AGVLcWwc7Ng3AAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;' type="password"/>
     <!-- ngIf: accounts.password.$dirty && accounts.password.$invalid -->
    </div>
   </div>
   <div class="row row-submit">
    <div class="col-xs-12 col-sm-6">
     <div class="checkbox">
      <label class="ng-binding">
       <input class="ng-pristine ng-untouched ng-valid ng-not-empty" id="login-remember" name="remember" ng-model="form.remember" type="checkbox"/>
       Remember me
       <span class="control-indicator">
       </span>
      </label>
     </div>
    </div>
    <div class="col-xs-12 col-sm-6">
     <button class="btn btn-sm btn-block btn-green ng-binding">
      Log In
     </button>
    </div>
   </div>
  </form>

【问题讨论】:

  • 如果表单没有 action 属性,则默认为当前 URL。
  • 除非有一些神奇的 javascript 正在接管表单,并且看起来像 Angular-y,否则可能存在。检查您的开发工具中的网络选项卡,看看它的位置。
  • 另请注意,您可能希望使用 API:developer.spotify.com/web-api

标签: php python html web-scraping http-post


【解决方案1】:

您可以使用 $.ajax 方法来发布值而无需操作。

【讨论】:

  • 能否进一步解释一下?
【解决方案2】:

请检查并使用:

 <form id="contactForm1" action="/your_url" method="post">
<!-- Form input fields here (do not forget your name attributes). -->
</form>

 <script type="text/javascript">
var frm = $('#contactForm1');

frm.submit(function (e) {

    e.preventDefault();

    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        success: function (data) {
            console.log('Submission was successful.');
            console.log(data);
        },
        error: function (data) {
            console.log('An error occurred.');
            console.log(data);
        },
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2021-09-30
    • 2017-07-17
    • 2021-11-30
    • 2017-06-05
    相关资源
    最近更新 更多