0
當javascript被加載時,它會在響應中設置cookie的另一個ajax請求。但是,Splash不會跨多個請求保留任何Cookie,是否有辦法在所有請求中保留Cookie?或者甚至在每個請求之間手動分配它們。如何在JavaScript提出多個請求時在Scrapy + Splash中設置Cookie?
當javascript被加載時,它會在響應中設置cookie的另一個ajax請求。但是,Splash不會跨多個請求保留任何Cookie,是否有辦法在所有請求中保留Cookie?或者甚至在每個請求之間手動分配它們。如何在JavaScript提出多個請求時在Scrapy + Splash中設置Cookie?
是的,有在scrapy-splash自述的例子 - 見Session Handling部分。總之,首先,確保所有設置都是正確的。然後使用SplashRequest(url, endpoint='execute', args={'lua_source': script})
發送scrapy請求。渲染腳本應該是這樣的:
function main(splash)
splash:init_cookies(splash.args.cookies)
-- ... your script
return {
cookies = splash:get_cookies(),
-- ... other results, e.g. html
}
end
也有與cookie處理,報頭處理等在scrapy飛濺README一個完整的例子 - 見最後一個例子here。
感謝您的幫助米哈伊爾,當我需要的時候我做'飛濺設置在JavaScript中,4個不同的請求發生的呼叫餅乾會發生什麼:去(URL)',我想第二個請求後設置Cookie –
對不起,我不太明白這個問題。在AJAX響應中收到的Cookie應該合併到Splash cookiejar並在splash中返回:get_cookies()。 splash:init_cookies()設置瀏覽器cookiejar的內容,瀏覽器應該爲所有請求使用這些cookie,包括AJAX請求。因此,無論您在Lua腳本中做出多少請求,上面的腳本都應該可以工作。 –
哦,我現在明白了,所以我猜這個問題不在於cookie。我基本上試圖通過Splash訪問Crunchbase.com,他們有一些奇怪的機器人保護。從瀏覽器訪問始終有效。你有沒有關於如何使Splash的行爲與瀏覽器完全相同的想法? –