Làm cách nào để lưu tất cả cookie trong Selenium WebDriver của Python vào tệp txt, rồi tải chúng sau? Tài liệu không nói nhiều về hàm getCookies.
Làm cách nào để lưu tất cả cookie trong Selenium WebDriver của Python vào tệp txt, rồi tải chúng sau? Tài liệu không nói nhiều về hàm getCookies.
Câu trả lời:
Bạn có thể lưu cookie hiện tại dưới dạng đối tượng python bằng cách sử dụng pickle. Ví dụ:
import pickle
import selenium.webdriver
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
và sau đó để thêm lại chúng:
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)
drive.add_cookie
lại lần nữa, tôi nhận được thông báo lỗi cho biết khóa "hết hạn" không hợp lệ. Tôi đang sử dụng chromedriver trên Mac OS
Khi bạn cần cookie từ phiên này sang phiên khác, có một cách khác để thực hiện, sử dụng tùy chọn user-data-dir của Chrome để sử dụng các thư mục làm hồ sơ, tôi chạy:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
Bạn có thể thực hiện ở đây các thông tin đăng nhập để kiểm tra sự tương tác của con người, tôi làm điều này và sau đó là các cookie tôi cần bây giờ mỗi khi tôi khởi động Webdriver với thư mục đó, mọi thứ đều có trong đó. Bạn cũng có thể cài đặt các Tiện ích mở rộng theo cách thủ công và có chúng trong mỗi phiên. Tôi chạy vài giây, tất cả cookie đều ở đó:
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.
Ưu điểm là bạn có thể sử dụng nhiều thư mục với các cài đặt và cookie khác nhau, Tiện ích mở rộng mà không cần tải, dỡ cookie, cài đặt và gỡ cài đặt Tiện ích mở rộng, thay đổi cài đặt, thay đổi thông tin đăng nhập qua mã và do đó không có cách nào để có logic của chương trình bị ngắt, vv Ngoài ra, điều này nhanh hơn havin làm tất cả bằng mã.
chrome_options = Options()
cho tôi name 'Options' is not defined
...?
from selenium.webdriver.chrome.options import Options
Hãy nhớ rằng, bạn chỉ có thể thêm cookie cho miền hiện tại. Nếu bạn muốn thêm cookie cho tài khoản Google của mình, hãy
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
Dựa trên câu trả lời của @Eduard Florinescu nhưng với mã mới hơn và nhập bị thiếu được thêm vào:
$ 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()
Chỉ là một sửa đổi nhỏ đối với mã do @Roel Van de Paar viết, vì tất cả tín dụng đều thuộc về anh ta. Tôi đang sử dụng cái này trong Windows và nó đang hoạt động hoàn hảo, cho cả việc thiết lập và thêm cookie:
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)
đây là mã tôi đã sử dụng trong windows, Nó hoạt động.
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)
hệ điều hành của tôi là Windows 10 và phiên bản chrome là 75.0.3770.100. Tôi đã thử giải pháp 'user-data-dir', không hoạt động. thử giải pháp của @ Eric Klien cũng không thành công. cuối cùng, tôi thực hiện cài đặt chrome như hình, nó hoạt động! nhưng nó không hoạt động trên windows server 2012.
cài đặt