Python + Selenium WebDriver kullanılarak tanımlama bilgileri nasıl kaydedilir ve yüklenir


109

Python'un Selenium WebDriver'daki tüm tanımlama bilgilerini bir txt dosyasına nasıl kaydedip daha sonra yükleyebilirim? Belgeler getCookies işlevi hakkında pek bir şey söylemiyor.

Yanıtlar:


184

Mevcut çerezleri turşu kullanarak bir python nesnesi olarak kaydedebilirsiniz. Örneğin:

import pickle
import selenium.webdriver 

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

ve daha sonra onları tekrar eklemek için:

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
"Turşu protokolü <= 2" hatası alıyorum. Gönderdiğiniz turşu kodunu kullanarak. Ne anlama geliyor? Argümanlara mı atıfta bulunuyor?
Aaron Hiniker

Bu aynı şeyi yapar mı? cookieFile = open ("cookies.pkl", "w") dump = pickle.dumps (driver.get_cookies ()) cookieFile.write (dump)
Aaron Hiniker

1
Merhaba Aaron, örneği biraz değiştirdim - temelde dosya açma bölümlerine eklenen 'b' bayrağı. Bununla deneyebilir misin?
Ali-Akber Saifee

Aynı hata, turşuya aşina olmadığım için ne olduğundan emin değilim. "ValueError'ı yükselt (" turşu protokolü <=% d "% HIGHEST_PROTOCOL olmalıdır"
Aaron Hiniker

5
Bununla ilgili bir sorunum var. İyi çalışıyor ancak drive.add_cookietekrar denediğimde "son kullanma" anahtarının geçerli olmadığını belirten bir hata mesajı aldım. Mac OS'de chromedriver kullanıyorum
Solal

56

Oturumdan oturuma çerezlere ihtiyaç duyduğunuzda, bunu yapmanın başka bir yolu daha vardır, klasörleri profil olarak kullanmak için Chrome seçenekleri user-data-dizinini kullanın, şunu çalıştırıyorum:

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

Burada insan etkileşimini kontrol eden oturum açma bilgilerini yapabilirsiniz, bunu yapıyorum ve şimdi ihtiyacım olan tanımlama bilgilerini, Webdriver'ı bu klasörle her başlattığımda her şey oradadır. Ayrıca Uzantıları manuel olarak yükleyebilir ve her oturumda bunlara sahip olabilirsiniz. İkinci kez çalıştırdığım zaman, tüm çerezler orada:

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. 

Avantajı, farklı ayarlara ve çerezlere sahip birden fazla klasör kullanabilmeniz, Çerezleri yüklemeye, boşaltmaya, Uzantıları yüklemeye ve kaldırmaya, ayarları değiştirmeye, girişleri kodla değiştirmeye gerek kalmadan kullanabilmeniz ve böylece programın mantığını bozmanın hiçbir yolu olmamasıdır. vb. Ayrıca bu, hepsini kodla yapmaktan daha hızlıdır.


4
Bu, Google girişleri ile uğraşırken benim için en iyi çözümdü. Bir noktada geliştirme kullanımım şüpheli etkinlik olarak işaretlendi.
Moshe Stauber

2
@ p1g1n bu çözüm kullanılmadan önce veya sonra işaretlendi
Eduard Florinescu

3
Maalesef, çözümü kullanmadan önce işaretlendi. Şüpheli bir aktivite olmaması için şimdi oturumumu açık tutuyorum.
Moshe Stauber

2
chrome_options = Options()verir name 'Options' is not defined...?
Dan

4
@Dan yapmanız gerekenler:from selenium.webdriver.chrome.options import Options
Eduard Florinescu

32

Unutmayın, yalnızca mevcut etki alanı için bir çerez ekleyebileceğinizi unutmayın. Google hesabınız için bir çerez eklemek istiyorsanız,

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

1
Bu onların belgelerinde olmalıdır :(
Tjorriemorrie


3
@MauricioCortazar, etki alanı gereksinimi hakkında hiçbir şey söylemiyor, ki benim bahsettiğim şey buydu
Tjorriemorrie

2
@Tjorriemorrie bu basit adam, çerezler yalnızca etki alanında saklanıyor, alt etki alanına bile izin verilmez
Mauricio Cortazar

1
Bu yorum, bir kök etki alanından bir çerez kullanan birden çok etki alanıyla ilgili görünmektedir. Örneğin, google.com kök alan olabilir ve Google'ın sahip olduğu başka bir alan veya alt alan aynı çerezi kullanabilir. @Eduard Florinescu'nun çözümünü bu (ve diğer nedenlerden dolayı) daha çok beğeniyorum çünkü çerezleri yüklemeden önce browser.get'i kullanmayı gerektirmiyor, bunlar zaten veri dizininde bulunuyor. Çerezler dosyasını yüklemeden önce (bu yoruma göre) ek browser.get'in gerekli olduğu görülüyor, ancak test edilmedi.
Roel Van de Paar

13

@Eduard Florinescu'nun cevabına göre, ancak daha yeni kod ve eksik içe aktarma eklenmiş:

$ 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
Turşu işi bende işe yaramadı. (Bu, onu ikinci kez kullanmayı denedim.) Bu yüzden, ilk başta benim için de işe yaramayan yöntemini kullandım. Yapmam gereken değişiklikler: github.com/theintern/intern/issues/878 adresinde belgelenen sorun nedeniyle chrome_options.add_argument ('sandbox yok') yazmam gerekti ve user-data- dir'i tam bir yol yapmak zorunda kaldım Windows 10 ortamımda.
Eric Klien

Kimlik doğrulama verilerini tanımlama bilgilerinde depolayan web sitem için çalışmıyor
Wildhammer

12

@Roel Van de Paar tarafından yazılan kodda ufak bir değişiklik, tüm övgü ona gitti. Bunu Windows'ta kullanıyorum ve hem çerezleri ayarlamak hem de eklemek için mükemmel çalışıyor:

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
Mükemmel çalışıyor! Windows kodunu gönderdiğiniz için teşekkür ederiz! Günümü kurtardın!
Anatol

Teşekkürler! Çok basit ve bir süredir beni deli ediyor. Herkese artı oy! :)
MT

0

bu pencerelerde kullandığım kod, çalışıyor.

 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)

-3

işletim sistemim Windows 10 ve chrome sürümü 75.0.3770.100. 'User-data-dir' çözümünü denedim, çalışmadı. @ Eric Klien çözümünü deneyin de başarısız olur. nihayet, krom ayarını resimdeki gibi yapıyorum, çalışıyor! ama Windows server 2012'de çalışmadı.

ayar

görüntü açıklamasını buraya girin


6
png, İngilizce kadar tanıdık olmayan bir dilde görünüyor. Lütfen yalnızca İngilizce gönderi yaptığınızdan emin olun.
amonk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.