2016-07-14 60 views
2

在環顧四周後使用Selenium,似乎如果您通過Scrapy登錄到網站,則如果嘗試在蜘蛛內使用Selenium,則認證的登錄會話不會轉移。有沒有辦法將該會話轉移到Selenium?或者我需要用Selenium重新登錄網站嗎?在經過認證的登錄會話後,通過Scrapy

謝謝!

回答

0

該會話很可能只是您的cookie。因此,要將會話轉換爲Selenium webdriver,您需要將scrapy請求的cookie設置爲硒。

Scrapy足夠聰明,可以自行追蹤cookie,您可以在response.headers中找到當前請求的cookie。
然後你可以設置這些Cookie您的webdriver:

import re 
foo = response.headers['Set-Cookie'] 
values = {k.strip():v for k,v in re.findall(r'(.*?)=(.*?);', foo)} 
driver.add_cookie(values) 

注:一些網站可以使用也需要更復雜的會話

driver.add_cookie({'name': 'foo', 'domain': 'bar'}) 

可以使用字典理解像變換response.headers['Set-Cookie']到詞典其他標題匹配,但您也可以通過將您的scrapy響應標題複製到您的selenium webdriver來複制該標題。

+0

嗨感謝這麼多,我來試試出。但是我對python和我很陌生; ma對於在re.findall(r'(。*?)=(。*?);''中爲k,v的'values = {k.strip():v' ,foo)}'line。你是否在行內定義了一個函數?我只想知道,所以我可以查找任何需要了解該行的相關教程。 –

+0

這被稱爲[詞典理解](http://stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python)它有點更先進的技術,但基本上它轉換字符串標題''「cookie1 = value1; cookie2 = value」'進入字典'{「cookie1」:「value1」,「cookie2」:「value2」}' – Granitosaurus

+0

非常感謝。它並沒有結束工作,但無論如何感謝!我採取了用硒手動重新登錄並導航回到我所在的位置。 –

0

檢查也有類似的問題在這裏scrapy selenium authentication

日誌與scrapy API

# call scrapy post request with after_login as callback 
    return FormRequest.from_response(
     response, 
     # formxpath=formxpath, 
     formdata=formdata, 
     callback=self.browse_files 
    ) 

通會話硒司機

# logged in previously with scrapy api 
# partial solution 
    cookies = map(lambda e: e.strip(), cookie2.split(";")) 

    for cookie in cookies:     
      cookie_map = {"name": name, "value": value}     
      print "adding cookie" 
      print cookie_map 
      self.driver.add_cookie(cookie_map) 

    self.driver.get(response.url) 

    files = self.wait_for_elements_to_be_present(By.XPATH, "//*[@id='files']", response) 
    print files