在環顧四周後使用Selenium,似乎如果您通過Scrapy登錄到網站,則如果嘗試在蜘蛛內使用Selenium,則認證的登錄會話不會轉移。有沒有辦法將該會話轉移到Selenium?或者我需要用Selenium重新登錄網站嗎?在經過認證的登錄會話後,通過Scrapy
謝謝!
在環顧四周後使用Selenium,似乎如果您通過Scrapy登錄到網站,則如果嘗試在蜘蛛內使用Selenium,則認證的登錄會話不會轉移。有沒有辦法將該會話轉移到Selenium?或者我需要用Selenium重新登錄網站嗎?在經過認證的登錄會話後,通過Scrapy
謝謝!
該會話很可能只是您的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來複制該標題。
檢查也有類似的問題在這裏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
嗨感謝這麼多,我來試試出。但是我對python和我很陌生; ma對於在re.findall(r'(。*?)=(。*?);''中爲k,v的'values = {k.strip():v' ,foo)}'line。你是否在行內定義了一個函數?我只想知道,所以我可以查找任何需要了解該行的相關教程。 –
這被稱爲[詞典理解](http://stackoverflow.com/questions/1747817/create-a-dictionary-with-list-comprehension-in-python)它有點更先進的技術,但基本上它轉換字符串標題''「cookie1 = value1; cookie2 = value」'進入字典'{「cookie1」:「value1」,「cookie2」:「value2」}' – Granitosaurus
非常感謝。它並沒有結束工作,但無論如何感謝!我採取了用硒手動重新登錄並導航回到我所在的位置。 –