पायथन + सेलेनियम वेबड्राइवर का उपयोग करके कुकीज़ को कैसे बचाया और लोड किया जाए


108

मैं पायथन के सेलेनियम वेबड्राइवर की सभी कुकीज़ को txt-file में कैसे सहेज सकता हूं, बाद में उन्हें लोड कर सकता हूं? प्रलेखन getCookies समारोह के बारे में ज्यादा कुछ नहीं कहता है।

जवाबों:


181

अचार का उपयोग करके आप मौजूदा कुकीज़ को अजगर वस्तु के रूप में सहेज सकते हैं। उदाहरण के लिए:

import pickle
import selenium.webdriver 

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))

और बाद में उन्हें वापस जोड़ने के लिए:

import pickle
import selenium.webdriver 

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

1
मुझे "अचार प्रोटोकॉल होना चाहिए <= 2" त्रुटि। आपके द्वारा पोस्ट किए गए अचार कोड का उपयोग करना। इसका क्या मतलब है? क्या यह तर्कों का जिक्र है?
हारून हनिकर

क्या यह वही काम करेगा? कुकीफाइल = खुला ("कुकीज़.पाकल", "डब्ल्यू") डंप = अचार। पंप (ड्राइवर.गेट_कुकि ()) कुकीफाइल.राइट (डंप)
हारून हनिकर

1
हाय हारून, मैंने नमूने को थोड़ा संशोधित किया है - मूल रूप से 'बी' ध्वज फ़ाइल खुले वर्गों में जोड़ा गया है। क्या आप इसके साथ प्रयास कर सकते हैं?
अली-अकबर सैफी

समान त्रुटि, मैं अचार से परिचित नहीं हूं इसलिए मुझे यकीन नहीं है कि यह क्या है। "ValueError बढ़ाएं (" अचार प्रोटोकॉल होना चाहिए <=% d "% HIGHEST_PROTOCOL"
हारून हनिकर

5
मेरे पास इसके साथ एक मुद्दा है। यह ठीक काम करता है जब मैं drive.add_cookieफिर से टी करने की कोशिश करता हूं तो मुझे एक त्रुटि संदेश मिला है जिसमें कहा गया है कि "एक्सपायरी" कुंजी मान्य नहीं है। मैं मैक ओएस पर क्रोमेड्रिवर का उपयोग कर रहा हूं
सोलल

56

जब आपको सत्र से सत्र तक कुकीज़ की आवश्यकता होती है, तो ऐसा करने का एक और तरीका है, फ़ोल्डर के रूप में प्रोफाइल का उपयोग करने के लिए, क्रोम विकल्प उपयोगकर्ता-डेटा-डीआईआर का उपयोग करें, मैं चलाता हूं:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

आप यहां उन लॉगिन कर सकते हैं जो मानव इंटरैक्शन की जांच करते हैं, मैं यह करता हूं और फिर कुकीज की मुझे हर समय आवश्यकता होती है जब मैं उस फ़ोल्डर के साथ वेबड्राइवर शुरू करता हूं तो सब कुछ वहां होता है। आप मैन्युअल रूप से एक्सटेंशन भी स्थापित कर सकते हैं और उन्हें हर सत्र में ले सकते हैं। सेकंड के समय मैं चला, सभी कुकीज़ वहाँ हैं:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see  the cookies, the settings, extensions, etc, and the logins done in the previous session are present here. 

लाभ यह है कि आप विभिन्न सेटिंग्स और कुकीज़ के साथ कई फ़ोल्डरों का उपयोग कर सकते हैं, लोड की आवश्यकता के बिना एक्सटेंशन, कुकीज़ को अनलोड करना, इंस्टॉल करना और अनइंस्टॉल करना, सेटिंग्स बदलना, कोड के माध्यम से लॉगिन बदलना, और इस तरह प्रोग्राम ब्रेक का तर्क रखने का कोई तरीका नहीं है, आदि इसके अलावा यह हविन की तुलना में तेज है यह सब कोड द्वारा किया जाता है।


4
Google लॉगिन के साथ काम करते समय मेरे लिए यह सबसे अच्छा समाधान था। कुछ बिंदु पर मेरे विकास उपयोग को संदिग्ध गतिविधि के रूप में चिह्नित किया गया था।
मोशे स्टाउबर

2
@ p1g1n को इस समाधान का उपयोग करने से पहले या बाद में चिह्नित किया गया था
एडुआर्ड फ्लोरिनेसस्कु

3
क्षमा करें, समाधान का उपयोग करने से पहले इसे ध्वजांकित किया गया था। अब मैं लॉग इन रहता हूं इसलिए कोई संदिग्ध गतिविधि नहीं है।
मोशे स्टाउबर

2
chrome_options = Options()मुझे देता है name 'Options' is not defined...?
डैन

4
@ आप की जरूरत है:from selenium.webdriver.chrome.options import Options
Eduard Florinescu

32

याद रखें, आप वर्तमान डोमेन के लिए केवल एक कुकी जोड़ सकते हैं। यदि आप अपने Google खाते के लिए कुकी जोड़ना चाहते हैं, तो करें

browser.get('http://google.com')
for cookie in cookies:
    browser.add_cookie(cookie)

1
यह उनके प्रलेखन में होना चाहिए :(
Tjorriemorrie


3
@MauricioCortazar यह डोमेन आवश्यकता के बारे में कुछ नहीं कहता है, जो कि मैं जिक्र कर रहा था
तजोर्रीमोर्री

2
@Tjorriemorrie वह मूल आदमी है, कुकीज़ केवल डोमेन में संग्रहीत की जाती हैं, यहां तक ​​कि उपडोमेन की भी अनुमति नहीं है
मौरिसियो कोरटज़ार

1
यह टिप्पणी प्रासंगिक लगती है जहां रूट डोमेन से कुकी का उपयोग करते हुए कई डोमेन आते हैं। उदाहरण के लिए, google.com रूट डोमेन हो सकता है, और Google के स्वामित्व वाला कोई अन्य डोमेन या उप डोमेन उसी कुकी का उपयोग कर सकता है। मैं इस (और अन्य कारणों) की वजह से @Eduard Florinescu द्वारा समाधान को पसंद करता हूं क्योंकि कुकीज़ को लोड करने से पहले ब्राउज़र का उपयोग करने की आवश्यकता नहीं होती है, वे डेटा डायर से पहले से ही वहां हैं। ऐसा लगता है कि कुकीज़ फ़ाइल लोड करने से पहले यहां अतिरिक्त ब्राउज़र की आवश्यकता होती है (इस टिप्पणी के अनुसार), हालांकि इसका परीक्षण नहीं किया था।
Roel Van de Paar

12

@Eduard Florinescu द्वारा उत्तर के आधार पर लेकिन नए कोड और लापता आयात के साथ जोड़ा गया:

$ cat work-auth.py 
#!/usr/bin/python3

# Setup:
# sudo apt-get install chromium-chromedriver
# sudo -H python3 -m pip install selenium

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('/usr/bin/chromedriver',options=chrome_options)
chrome_options.add_argument("user-data-dir=chrome-data") 
driver.get('https://www.somedomainthatrequireslogin.com')
time.sleep(30)  # Time to enter credentials
driver.quit()

$ cat work.py 
#!/usr/bin/python3

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('/usr/bin/chromedriver',options=chrome_options)
driver.get('https://www.somedomainthatrequireslogin.com')  # Already authenticated
time.sleep(10)
driver.quit()

3
अचार का सामान मेरे काम नहीं आया। (यह दूसरी बार है जब मैंने इसका उपयोग करने की कोशिश की है।) इसलिए मैंने आपके तरीके का उपयोग किया जो कि मेरे लिए भी पहली बार काम नहीं आया। मेरे द्वारा किए गए परिवर्तन: मुझे github.com/theintern/intern/issues/878 पर प्रलेखित समस्या के कारण chrome_options.add_argument ('नो-सैंडबॉक्स') टाइप करना पड़ा और मुझे उपयोगकर्ता-डेटा-डीआर को एक पूर्ण पथ बनाना पड़ा। मेरे विंडोज 10 वातावरण में।
एरिक क्लियन

मेरी वेबसाइट के लिए काम नहीं करना जो कुकीज़ में प्रमाणीकरण डेटा संग्रहीत करता है
Wildhammer

12

@Roel Van de Paar द्वारा लिखे गए कोड के लिए बस थोड़ा सा संशोधन, क्योंकि सारा श्रेय उन्हें जाता है। मैं इसका उपयोग विंडोज में कर रहा हूं और यह पूरी तरह से काम कर रहा है, दोनों कुकीज़ को सेट करने और जोड़ने के लिए:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--user-data-dir=chrome-data")
driver = webdriver.Chrome('chromedriver.exe',options=chrome_options)
driver.get('https://web.whatsapp.com')  # Already authenticated
time.sleep(30)

2
अच्छी तरह से काम! विंडोज़ के लिए कोड पोस्ट करने के लिए धन्यवाद! आपने मेरा दिन बचाया!
अंटोल

धन्यवाद! इतना आसान है, और यह मुझे थोड़ी देर के लिए पागल कर रहा है। सभी के लिए वोट! :)
एमटी

0

यह कोड है जो मैंने विंडोज़ में उपयोग किया है, यह काम करता है।

 for item in COOKIES.split(';'):
            name,value = item.split('=',1)
            name=name.replace(' ','').replace('\r','').replace('\n','')
            value = value.replace(' ','').replace('\r','').replace('\n','')
            cookie_dict={  
                    'name':name,
                    'value':value,
                    "domain": "",  # google chrome
                    "expires": "",
                    'path': '/',
                    'httpOnly': False,
                    'HostOnly': False,
                    'Secure': False
                    }
            self.driver_.add_cookie(cookie_dict)

-2

मेरा ओएस विंडोज 10 है, और क्रोम संस्करण 75.0.3770.100 है। मैंने 'उपयोगकर्ता-डेटा-डीआईआर' समाधान की कोशिश की है, काम नहीं किया। @ एरिक कालिन का समाधान भी विफल रहता है। अंत में, मैं चित्र की तरह क्रोम सेटिंग करता हूं, यह काम करता है! लेकिन यह विंडोज़ सर्वर 2012 पर काम नहीं करता है।

स्थापना

यहां छवि विवरण दर्ज करें


4
लगता है कि अंग्रेजी की तरह परिचित भाषा भी नहीं है। कृपया सुनिश्चित करें कि आप केवल अंग्रेजी में पोस्ट करते हैं।
amonk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.