পাইথন + সেলেনিয়াম ওয়েবড্রাইভার ব্যবহার করে কীভাবে কুকিগুলি সংরক্ষণ এবং লোড করা যায়


106

পাইথনের সেলেনিয়াম ওয়েবড্রাইভারের সমস্ত কুকি কীভাবে একটি টেক্সট-ফাইলে সংরক্ষণ করতে পারি, তারপরে সেগুলি লোড করব? ডকুমেন্টেশন getCookies ফাংশন সম্পর্কে অনেক কিছুই বলে না।

উত্তর:


179

আপনি বর্তমান কুকিজকে আচার ব্যবহার করে পাইথন অবজেক্ট হিসাবে সংরক্ষণ করতে পারেন। উদাহরণ স্বরূপ:

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" ত্রুটি হওয়া উচিত। আপনি পোস্ট করা আচার কোড ব্যবহার করে। এটার মানে কি? এটি কি যুক্তিগুলি উল্লেখ করছে?
হারুন হানিকর

এটি কি একই কাজ করবে? কুকিফিল = খোলা ("ڪوڪيز.pkl", "ডাব্লু") ডাম্প = পিকেল.ডাম্পস (ড্রাইভার.get_cookies ()) কুকিফিল.উইরাইট (ডাম্প)
অ্যারন হানিকর

1
হাই অ্যারন, আমি নমুনাটি কিছুটা পরিবর্তন করেছি - মূলত ফাইল খোলার বিভাগগুলিতে 'বি' পতাকা যুক্ত করা হয়েছে। আপনি কি এটি দিয়ে চেষ্টা করতে পারেন?
আলী-আকবার সাইফি

একই ত্রুটি, আমি আচারের সাথে পরিচিত না তাই এটি কী তা আমি নিশ্চিত নই। "মান বাড়ান (" আচারের প্রোটোকলটি অবশ্যই <=% d "% HIGHEST_PROTOCOL হতে হবে"
অ্যারন হানিকর

5
এ নিয়ে আমার একটা সমস্যা আছে। এটি ঠিক আছে তবে আমি যখন drive.add_cookieআবার চেষ্টা করার চেষ্টা করি তখন আমি একটি ত্রুটি বার্তা পেয়েছিলাম "মেয়াদোত্তীর্ণ" কীটি বৈধ নয়। আমি ম্যাক ওএসে ক্রোমড্রাইভার ব্যবহার করছি
সোলাল

55

আপনার যখন সেশন থেকে সেশন পর্যন্ত কুকিগুলির দরকার হয় তখন এটি করার আরও একটি উপায় থাকে, ফোল্ডারগুলিকে প্রোফাইল হিসাবে ব্যবহার করতে ক্রোম বিকল্পগুলি ব্যবহারকারী-ডেটা-ডির ব্যবহার করুন, আমি চালিত করি:

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

আপনি এখানে লগইনগুলি করতে পারেন যা মানুষের মিথস্ক্রিয়া যাচাই করে, আমি এটি করি এবং তারপরে এখন আমার প্রয়োজন কুকিগুলি প্রত্যেকবার folder ফোল্ডারটি দিয়ে সেখানে ওয়েবড্রাইভার শুরু করে everything আপনি এক্সটেনশানগুলি ম্যানুয়ালি ইনস্টল করতে পারেন এবং প্রতিটি সেশনে সেগুলি রাখতে পারেন। সেকোন সময় আমি চালানোর সময়, সমস্ত কুকি রয়েছে:

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
গুগল লগইনগুলির সাথে কাজ করার সময় এটিই আমার পক্ষে সেরা সমাধান ছিল। এক পর্যায়ে আমার বিকাশের ব্যবহারটিকে সন্দেহজনক ক্রিয়াকলাপ হিসাবে চিহ্নিত করা হয়েছিল।
মোশে স্টোবার

2
@ p1g1n এই সমাধানটি ব্যবহার করার আগে বা পরে পতাকাঙ্কিত করা হয়েছিল
এডুয়ার্ড ফ্লোরিয়েনস্কু

3
দুঃখিত, সমাধানটি ব্যবহারের আগে এটি পতাকাঙ্কিত করা হয়েছিল। এখন আমি লগ ইন থাকি তাই কোনও সন্দেহজনক কার্যকলাপ নেই।
মোশে স্টোবার

2
chrome_options = Options()আমাকে দেয় name 'Options' is not defined...?
ড্যান

4
@ ড্যান আপনার প্রয়োজন:from selenium.webdriver.chrome.options import Options
এডুয়ার্ড ফ্লোরিয়েন্সু

32

মনে রাখবেন, আপনি বর্তমান ডোমেনের জন্য কেবল একটি কুকি যোগ করতে পারেন। আপনি যদি নিজের গুগল অ্যাকাউন্টের জন্য কোনও কুকি যুক্ত করতে চান তবে করুন

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

1
এটি তাদের ডকুমেন্টেশনে থাকতে হবে :(
টজোররিমুরি


3
@ মৌরিসিওকোটাজার এটি ডোমেনের প্রয়োজনীয়তা সম্পর্কে কিছুই বলে না, যা আমি উল্লেখ করছি
টজোররিমুরি

2
@ তাজরিরিমুরি এই প্রাথমিক মানুষ, কুকি কেবল ডোমেনে সংরক্ষণ করা হয়, এমনকি সাবডোমেনও অনুমোদিত নয়
মরিসিও কর্টাজার

1
এই মন্তব্যটি প্রাসঙ্গিক বলে মনে হচ্ছে যেখানে এটি রুট ডোমেনের কুকি ব্যবহার করে একাধিক ডোমেনের জন্য আসে। উদাহরণস্বরূপ, google.com মূল ডোমেন হতে পারে এবং গুগলের মালিকানাধীন অন্য ডোমেন বা সাবডোমেন একই কুকি ব্যবহার করতে পারে। আমি এডওয়ার্ড ফ্লোরিয়েন্সকু এর সমাধানটি আরও ভাল পছন্দ করেছি কারণ এটির (এবং অন্যান্য কারণে) কারণ কুকিগুলি লোড করার আগে ব্রাউজার.জেট ব্যবহার করার প্রয়োজন নেই, তারা ডেটা ডির থেকে ইতিমধ্যে রয়েছে। দেখে মনে হচ্ছে কুকিজ ফাইলটি লোড করার আগে এখানে অতিরিক্ত ব্রাউজারের দরকার আছে (এই মন্তব্য অনুসারে), যদিও এটি পরীক্ষা করে নি।
রোল ভ্যান ডি পায়ার

12

@ এডওয়ার্ড ফ্লোরিয়েন্সকু উত্তর অনুসারে কিন্তু নতুন কোড এবং অনুপস্থিত আমদানির সাথে যুক্ত:

$ 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 নথিভুক্ত সমস্যার কারণে আমাকে ক্রোম_অপশন.এডিডি_আরগমেন্ট ('ন-স্যান্ডবক্স') টাইপ করতে হয়েছিল এবং আমাকে ব্যবহারকারী-ডেটা- ডিরকে একটি পুরো পথ তৈরি করতে হয়েছিল আমার উইন্ডোজ 10 পরিবেশে।
এরিক ক্লিন

আমার ওয়েবসাইটের জন্য কাজ করছে না যা কুকিতে প্রমাণীকরণের ডেটা সঞ্চয় করে
ওয়াইল্ডহ্যামার

12

@ রোল ভ্যান ডি পায়ার দ্বারা লিখিত কোডের জন্য কেবলমাত্র একটি সামান্য পরিবর্তন, কারণ সমস্ত কৃতিত্ব তাঁর কাছে যায়। আমি এটি উইন্ডোতে ব্যবহার করছি এবং এটি কুকিজ সেট এবং যুক্ত করার জন্য উভয়ই নিখুঁতভাবে কাজ করছে:

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। আমি 'ইউজার-ডেটা-ডির' সমাধান চেষ্টা করেছি, কার্যকর হয়নি। @ এরিক ক্লিনের সমাধানটিও ব্যর্থ হয় try অবশেষে, আমি ছবির মতো ক্রোম সেটিংটি তৈরি করি, এটি কাজ করে! তবে উইন্ডোজ সার্ভার ২০১২ এ এটি কার্যকর হয়নি।

বিন্যাস

এখানে চিত্র বর্ণনা লিখুন


4
পিএনজি মনে হচ্ছে ইংরেজি তেমন কোনও পরিচিত ভাষায় নেই। দয়া করে নিশ্চিত হন যে আপনি কেবল ইংরেজিতে পোস্ট করেছেন।
amonk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.