ฉันจะบันทึกคุกกี้ทั้งหมดใน Selenium WebDriver ของ Python เป็นไฟล์ txt แล้วโหลดในภายหลังได้อย่างไร เอกสารประกอบไม่ได้บอกอะไรเกี่ยวกับฟังก์ชัน getCookies มากนัก
ฉันจะบันทึกคุกกี้ทั้งหมดใน Selenium WebDriver ของ Python เป็นไฟล์ txt แล้วโหลดในภายหลังได้อย่างไร เอกสารประกอบไม่ได้บอกอะไรเกี่ยวกับฟังก์ชัน getCookies มากนัก
คำตอบ:
คุณสามารถบันทึกคุกกี้ปัจจุบันเป็นวัตถุหลามโดยใช้ผักดอง ตัวอย่างเช่น:
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)
drive.add_cookie
อีกครั้งฉันได้รับข้อความแสดงข้อผิดพลาดว่าคีย์ "หมดอายุ" ไม่ถูกต้อง ฉันใช้ chromedriver บน Mac OS
เมื่อคุณต้องการคุกกี้จากเซสชันไปยังเซสชันมีวิธีอื่นในการทำเช่นนี้ใช้ตัวเลือก Chrome ตัวเลือกข้อมูลผู้ใช้เพื่อใช้โฟลเดอร์เป็นโปรไฟล์ฉันเรียกใช้:
chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
คุณสามารถทำได้ที่นี่การเข้าสู่ระบบที่ตรวจสอบการโต้ตอบของมนุษย์ฉันทำสิ่งนี้แล้วคุกกี้ที่ฉันต้องการตอนนี้ทุกครั้งที่ฉันเริ่ม Webdriver ด้วยโฟลเดอร์นั้นทุกอย่างอยู่ในนั้น คุณยังสามารถติดตั้งส่วนขยายด้วยตนเองและมีในทุกเซสชัน เวลาที่ใช้งาน Secon คุกกี้ทั้งหมดอยู่ที่นั่น:
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.
ข้อดีคือคุณสามารถใช้หลายโฟลเดอร์ที่มีการตั้งค่าและคุกกี้ที่แตกต่างกันส่วนขยายโดยไม่จำเป็นต้องโหลดยกเลิกการโหลดคุกกี้ติดตั้งและถอนการติดตั้งส่วนขยายเปลี่ยนการตั้งค่าเปลี่ยนการเข้าสู่ระบบผ่านรหัสจึงไม่มีทางที่จะทำให้ตรรกะของโปรแกรมหยุดทำงานได้ ฯลฯ นอกจากนี้ยังเร็วกว่า havin ที่จะทำทุกอย่างด้วยรหัส
chrome_options = Options()
ให้ฉันname 'Options' is not defined
... ?
from selenium.webdriver.chrome.options import Options
โปรดจำไว้ว่าคุณสามารถเพิ่มคุกกี้สำหรับโดเมนปัจจุบันเท่านั้น หากคุณต้องการเพิ่มคุกกี้สำหรับบัญชี Google ของคุณให้ทำ
browser.get('http://google.com')
for cookie in cookies:
browser.add_cookie(cookie)
อ้างอิงจากคำตอบของ @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()
เพียงแค่ปรับเปลี่ยนโค้ดเล็กน้อยที่เขียนโดย @Roel Van de Paar เนื่องจากเครดิตทั้งหมดตกเป็นของเขา ฉันใช้สิ่งนี้ใน Windows และทำงานได้อย่างสมบูรณ์ทั้งสำหรับการตั้งค่าและเพิ่มคุกกี้:
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)
นี่คือรหัสที่ฉันใช้ใน windows มันใช้งานได้
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)
ระบบปฏิบัติการของฉันคือ Windows 10 และ Chrome เวอร์ชัน 75.0.3770.100 ฉันได้ลองใช้โซลูชัน 'user-data-dir' แล้วไม่ได้ผล ลองวิธีแก้ปัญหาของ @ Eric Klien ก็ล้มเหลวเช่นกัน ในที่สุดฉันก็ตั้งค่าโครเมี่ยมเหมือนในภาพมันใช้งานได้! แต่มันไม่ทำงานบน windows server 2012
การตั้งค่า