我遇到了一些麻煩,試圖構建一個python機器人來檢查應用程序的狀態。對於解釋,這裏是這個過程的一個例子:如何使用Python請求,會話或dryscrape維護會話cookie(在退出時過期)?
1)訪問網站(https://examplewebsite.com/checkinfo.do?a=sample
2)假設查詢字符串是否正確,網站將下降一個cookie。這個cookie是一個'會話cookie',因此在退出關閉或離開網頁時立即過期。一旦餅乾已獲得訪問https://examplewebsite.com/step2.do?a=sample
4)請求的解析結果https://examplewebsite.com/step2.do?a=sample
雖然這看似簡單,我無法發送第二請求https://examplewebsite.com/step2.do?a=sample
3)和我經常遇到一個頁面說「會話過期」。
我試圖用Python請求,Python requests.session以及dryscrape重現這個過程。但我無法實現它 - 我的直覺是,因爲cookie是一個「會話cookie」,當第二次請求https://examplewebsite.com/step2.do?a=sample啓動但頁面加載之前,它會立即生效。
也許有更好的方式來解釋的問題是與瀏覽器的行爲,使用Firefox和IE的網站的行爲類似於下面:
1)訪問網站(https://examplewebsite.com/checkinfo.do?a=sample)
- Cookie是成功獲得
2.)與替換URL https://examplewebsite.com/step2.do?a=sample
- 「會話過期」 的警告提出
然而,這並不工作:
1)
- 成功獲得一個cookie訪問網站(鏈接同上)
2.)在保持第一個選項卡打開的同時,創建第二個選項卡並將 https://examplewebsite.com/step2.do?a=sample粘貼到瀏覽器中
- 信息已正確加載,並且未出現「會話過期」警告。
所以我的問題是,如何在Python中重現「創建新選項卡」的行爲,同時保持請求之間共享會話cookie。
這是我嘗試做它在dryscrape
import dryscrape
a = dryscrape.Session()
a.set_header("User-Agent", "Firefox")
a.visit('checkinfo.do URL')
b = dryscrape.Session()
b.set_header("User-Agent", "Firefox")
b.set_cookie(a.cookies()) #This is my attempt to share the session cookies in a seperate dryscrape object to simulate putting the URL in a second tab.
b.visit('step2.do URL')
不幸的是,上述不工作,和一個。在第二次請求之前和之後,cookie與b.cookies不匹配。
注意:網站頁面的代碼會在頁面卸載時結束會話。因此,如果dryscrape執行與卸載頁面相同的任何操作,會話cookie將被服務器標記爲無效。
我試圖重新創造dryscrape一個新的標籤相同的效果不工作,有人可以確認,如果我傳遞的cookies正確嗎?是否有特殊的方式來傳遞「會話cookie」,因爲它看起來好像沒有傳遞完整的cookie。請參閱上面的編輯。 –
我曾嘗試通過set_header設置Cookie信息,但仍未能使其正常工作。 我相信由於某種原因,當我通過dryscrape獲取cookie時,它即將過期,可能是因爲dryscrape的行爲導致cookie在客戶端或服務器端過期。 –
仍然在這個: 我發現我可以通過dryscrape貸款第二頁,如果我: 1.)訪問firefox的第一頁; 2.)訪問firefox中的第二頁: 3.)使用set_headers將第二個firefox頁面加載的請求標題複製到dryscrape對象中,然後使用visit加載第二個頁面。 –