как использовать scrapy с spla sh для входа на сайт - PullRequest
2 голосов
/ 29 апреля 2020

Я пытаюсь зайти на любой сайт, используя Scrapy. Но сейчас я не могу войти на сайт, который использует Javascript FormSubmit. Следовательно, я хотел бы знать, как я могу войти на сайт, который не формирует действие, указанное в форме. Необходимо знать, как успешно войти на сайт, используя javascript и ajax.

<!DOCTYPE html>
<html lang="en">
   <head>
      <!-- Required meta tags -->
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
      <!-- Bootstrap CSS -->
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
   </head>
   <body>
      <div class="container">
         <div class="card" style="margin-top:10%">
            <div class="card-header">
               Login
            </div>
            <div class="card-body">
            <div id="error-msg" class="alert alert-danger" style="display:none" role="alert"></div>
               <form name="login-form"   id="login-form" >
                  <div class="form-group">
                     <label for="email">Email address</label>
                     <input type="email" class="form-control" name="email" id="email" placeholder="Enter email">
                  </div>
                  <div class="form-group">
                     <label for="password">Password</label>
                     <input type="password" class="form-control" name="password" id="password" placeholder="Password">
                  </div>
                  <button type="submit" id="login" class="btn btn-primary">Login</button>
               </form>
            </div>
         </div>
      </div>
      <!-- Optional JavaScript -->
      <!-- jQuery first, then Popper.js, then Bootstrap JS -->
      <script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>

      <script>
            $(function()
            {
                $('#login').click(function(e){

                    let self = $(this);

                    e.preventDefault(); // prevent default submit behavior

                    $(this).prop('disabled',true); 

                    var data = $('#login-form').serialize(); // get form data
                    console.log(data)

                     // sending ajax reqeust to login.php file, it will proccess login reqeust and give response.
                    $.ajax({
                        url: './login.php',
                        type: "POST",
                        data: data,
                    }).done(function(res) {
                        res = JSON.parse(res);
                        if (res['status']) // if login successful redirect user to secure.php page.
                        {
                            location.href = "secure.php"; // redirect user to secure.php location/page.
                        } else {

                            var errorMessage = '';
                            // if there is any errors convert array of errors into html string, 
                            //here we are wrapping errors into a paragraph tag.
                            console.log(res.msg);
                            $.each(res['msg'],function(index,message) {
                                errorMessage += '<p>' + message+ '</p>';
                            });
                            // place the errors inside the div#error-msg.
                            $("#error-msg").html(errorMessage);
                            $("#error-msg").show(); // show it on the browser, default state, hide
                            // remove disable attribute to the login button, 
                            //to prevent multiple form submisstions 
                            //we have added this attributon on login from submit
                            self.prop('disabled',false); 
                        }
                    }).fail(function() {
                        alert("error");
                    }).always(function(){
                        self.prop('disabled',false); 
                    });
                });
            });
        </script>

   </body>
</html>

Могу ли я ноу-хау войти на сайт с вышеупомянутой структурой. Где часть аутентификации обрабатывается в javascript. Я пытался с FormRequest.from_response(response, formdata=form_data, callback=self.check_login_response) Но это не работает в выше. Буду признателен за ваше время для чтения. Надеюсь, вы могли бы помочь мне найти решение.

...