Как использовать scrapy для регистрации в режиме без элемента формы

107
12

Я пытаюсь войти в систему на каком-либо веб-сайте, но похоже, что они не используют форму для отображения диалогового окна входа. Поэтому при использовании FormRequest я получил ошибку

raise ValueError("No <form> element found in %s" % response)

Итак, как я могу войти в систему с помощью scrapy в этом случае?

Я пытаюсь найти элемент формы на этом сайте (используя chrome devtool с формой xpath//), но результат равен нулю

Элемент входа

<div class="loginModalBody">
<div class="coverLoginModal">
<p class="loginModalTitle">Login </p>

<div class=""><p class="login-msg"></p></div>

<!-- Email -->
<div class="loginCoverInputText">
<input class="loginInputText" id="email-login" role="presentation" autocomplete="off" type="email" name="loginEmail" placeholder="E-mail">
<span class="loginNameInputText">E-mail</span>
<span class="loginLineInputText"></span>
<!-- Error email -->
<div class="dontEnterEmail loginErrorInput"><p class="loginError">Vui lòng nhập email<span class="loginIconError"></span></p></div>
<div class="loginEmailInvalid loginErrorInput"><p class="loginError">Invalid email<span class="loginIconError"></span></p></div>
</div>

<!-- Password -->
<div class="loginCoverInputText">
<input class="loginInputText" id="password-login" autocomplete="new-password" type="password" name="loginPassword" placeholder="Password">
<span class="loginNameInputText">Password</span>
<span class="loginLineInputText"></span>
<!-- Error password -->
<div class="dontEnterPassword loginErrorInput"><p class="loginError">Enter password<span class="loginIconError"></span></p></div>
</div>

<!-- Remember password -->
<label class="loginRememberPassword" id="login-remember-pass" for="loginRememberPassword"><input id="loginRememberPassword" type="checkbox" name="loginRememberPassword"><span></span>Ghi nhớ mật khẩu</label>
<p class="loginForgotPassword forgot-password"> <a href="javascript:void(0)" data-dismiss="modal"><span></span>forgot pass</a></p>

<button class="loginButtonSubmit btn-login" id="btn-login-system" type="button">Login</button>

<p class="loginDontAccount">Do not have account? <a class="not-account" href="javascript:void(0)" data-dismiss="modal" data-toggle="modal" data-target="#modal-signup-system">Register!</a></p>
<p class="loginOr">Or</p>

<button type="button" class="loginByGoogle" onclick="open_login_g()">Login with Google</button>
<button type="button" class="loginByFacebook" onclick="open_login_f()">Login with Facebook</button>

</div>
</div>

Код, который я использую,

class Spider(scrapy.Spider):
name = "card"
start_urls = ["https://website/auth/signin"]
login_user = "foo"
login_pass = "bar"

def parse(self, response):
'''Parse login page'''
open_in_browser(response)
return FormRequest.from_response(
response,
formdata={
'email':"username",
'password': "pass"
},
callback=self.parse_home
)

def parse_home(self, response):
open_in_browser(response)
print response

спросил(а) 2018-05-27T11:18:00+03:00 2 года, 4 месяца назад
1
Решение
71

Веб-соскабливание - это запросы и ответы, поэтому все, что вам нужно, имитирует все пользовательские запросы. FormRequest просто помогает нам избежать дополнительной работы с формами. В этом случае вам нужно сделать правильный логин запрос.

Перейдите на нужную страницу и откройте инструменты разработчика в своем браузере (например, Chrome) Проверьте параметр preserve log на вкладке " Network ". Заполните учетные данные на странице и нажмите кнопку login. Выясните запрос на вход (после нажатия кнопки) Проверьте Headers в запросе и найдите тип и параметры запроса (это может быть GET с некоторыми параметрами запроса или POST с некоторыми Form Data В своем коде попробуйте воспроизвести запрос на вход, используя простой запрос Scrapy вместо FormRequest

ответил(а) 2018-05-27T22:00:00+03:00 2 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема