我正在嘗試登錄,但它甚至沒有輸入表單數據。 這是我的代碼登錄部分:scrapy登錄不起作用
start_urls = ['https://stmforum.com/amember/login.php']
def parse(self, response):
return FormRequest(url="https://stmforum.com/amember/protect/new-rewrite?f=2&url=/forum/forum.php&host=stmforum.com&ssl=on",
formdata={'amember_login': 'username','amember_pass':'password'},
callback=self.after_login)
def after_login(self,response):
if "incorrect" in response.body:
self.logger.error("Login failed")
return
elif "Login to your Account" in response.body:
self.logger.error("Try again")
return
else:
pass
這是網站的HTML代碼的一部分:
<form name="login" method="post" action="/amember/login">
<fieldset>
<legend>Login to your Account</legend>
<div id="recaptcha-row" class="row" style="display: none;" data-recaptcha-theme="light" data-recaptcha-size="normal">
<div class="row">
<div class="element-title">
<div class="element">
<input id="amember-login" name="amember_login" size="15" value="" autofocus="autofocus" placeholder="Username/Email" type="text"/>
</div>
</div>
<div class="row">
<div class="element-title">
<div class="element">
<input id="amember-pass" class="am-pass-reveal" name="amember_pass" size="15" placeholder="Password" type="password"/>
<span class="am-switch-reveal am-switch-reveal-off" title="Toggle Password Visibility"/>
<label id="am-form-login-remember" class="element-title" for="remember_login">
</div>
</div>
<div class="row">
</fieldset>
<input name="login_attempt_id" value="1503392293" type="hidden"/>
<input name="amember_redirect_url" value="https://stmforum.com/forum/forum.php" type="hidden"/>
而履帶式的結果:
[seeker] ERROR: Try again
[scrapy.core.engine] INFO: Closing spider (finished)
它去到after_login elif語句,這意味着它沒有改變頁面。基本上說,它甚至不輸入表單中的數據,也不會單擊登錄。 我試圖把形式數據「用戶名」和「密碼」我也試圖把id「amember-login」和「amember-pass」。 也試圖把clickdata = {'submit':'commit') 也試過FormRequest.from_response
與硒和它工作得很好。 我想用scrapy實現selenium,但它在服務器上不起作用。
有人可以幫助我嗎?
UPDATE:
start_urls = ['https://stmforum.com/amember/login.php']
def parse(self, response):
return FormRequest.from_response(response,
formdata={'amember_login':'user','amember_pass':'pass'},
callback=self.after_login)
def after_login(self,response):
if "incorrect" in response.body:
self.logger.error("Login failed")
return
elif "Login to your Account" in response.body:
self.logger.error("Try again")
return
else:
return FormRequest(url="https://stmforum.com/forum/",
formdata={'query': 'AdCombo'},
callback=self.parse_page)
和響應我得到:
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://stmforum.com/amember/login.php> (referer: None)
[scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://stmforum.com/amember/member> from <POST https://stmforum.com/amember/login>
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://stmforum.com/amember/member> (referer: https://stmforum.com/amember/login.php)
[seeker] ERROR: Try again
[scrapy.core.engine] INFO: Closing spider (finished)
的 'login_attempt_id' 對的每個請求的改變......我如何實現隱藏的價值形式數據。或者我還能做什麼?
你用['FormRequest.from_response()'](https://docs.scrapy.org/en/latest/topics/request-response.html#using-formrequest-from-響應到模擬 - 一個用戶登錄)? –
好的,你做到了。你是如何使用它的?有一些隱藏的字段,所以你需要通過它們似乎(例如'login_attempt_id')。您可以比較瀏覽器發送的內容(使用瀏覽器的Dev Tools網絡面板)和Scrapy發送的內容(例如,使用「scrapy shell https:// stmforum.com/amember/login.php」),然後檢查「FormRequest」的結果。 from_response()' –
我已經試過from_response之前,我再次嘗試它。我注意到login_attempt_id,但它會改變每個請求....我正在尋找一個令牌,我發現該ID代替。 – Omega