Hướng dẫn python session cookies - cookie phiên python

Trong Automation Test sử dụng Selenium WebDỉver với Python 3, nếu bạn đã đăng nhập thì làm sao lưu được trạng thái đăng nhập khi bật lại cửa sổ trình duyệt. Chúng ta phải thao tác cookie của trình duyệt. Bài hướng dẫn sau sẽ hướng dẫn lưu (Save) và nhập (import) lại Cookie

Để lưu cookie của trình duyệt chúng ta sử dụng đoạn code sau:

import selenium.webdriver

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

Để import lại cookie chúng ta sử dụng đoạn code bên dưới

import selenium.webdriver

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

Nguồn: vinasupport.com

Thành thật mà nói, tôi không thể hiểu được đầu hay đuôi của điều đó. Làm cách nào để giữ cookie giữa các yêu cầu POST?

Làm cách nào để thực hiện điều này trong python (tốt nhất là 2.6)? Nếu có thể, tôi chỉ muốn sử dụng các mô-đun nội trang.

  • python
  • http
  • authentication
  • cookies

147 hữu ích 0 bình luận 170k xem chia sẻ 0 bình luận 170k xem chia sẻ

answer

147

Hướng dẫn python session cookies - cookie phiên python

import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

resp.read()là html trực tiếp của trang bạn muốn mở và bạn có thể sử dụng openerđể xem bất kỳ trang nào bằng cookie phiên của mình.

147 hữu ích 5 bình luận chia sẻ 5 bình luận chia sẻ

answer

157

Hướng dẫn python session cookies - cookie phiên python

resp.read()là html trực tiếp của trang bạn muốn mở và bạn có thể sử dụng openerđể xem bất kỳ trang nào bằng cookie phiên của mình.

from requests import session

payload = {
    'action': 'login',
    'username': USERNAME,
    'password': PASSWORD
}

with session() as c:
    c.post('http://example.com/login.php', data=payload)
    response = c.get('http://example.com/protected_page.php')
    print(response.headers)
    print(response.text)

147 hữu ích 5 bình luận chia sẻ 4 bình luận chia sẻ

Hướng dẫn python session cookies - cookie phiên python

Đây là phiên bản sử dụng thư viện yêu cầu tuyệt vời :

157 hữu ích 4 bình luận chia sẻ

Hướng dẫn python session cookies - cookie phiên python

Tôi đang cố gắng thu thập một số dữ liệu bán hàng bằng cách sử dụng API StubHub . Ví dụ về dữ liệu này được xem ở đây:

https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata

Bạn sẽ nhận thấy rằng nếu bạn thử và truy cập vào url đó mà không đăng nhập vào stehub.com, nó sẽ không hoạt động. Bạn sẽ cần đăng nhập trước .

Khi tôi đã đăng nhập qua trình duyệt web của mình, tôi mở URL mà tôi muốn cạo trong tab mới, sau đó sử dụng lệnh sau để truy xuất dữ liệu đã quét:

r = requests.get('https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata')

Tuy nhiên, khi phiên trình duyệt hết hạn sau mười phút, tôi gặp lỗi này:


User Auth Check

Either is not active or the session might have expired. Please login again.

Tôi nghĩ rằng tôi cần triển khai ID phiên qua cookie để giữ cho xác thực của tôi tồn tại và tốt.

Tài liệu thư viện Yêu cầu khá khủng khiếp đối với một người chưa bao giờ làm việc này trước đây, vì vậy tôi hy vọng các bạn có thể giúp đỡ.

Ví dụ do Yêu cầu cung cấp là:

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print r.text
# '{"cookies": {"sessioncookie": "123456789"}}'

Thành thật mà nói, tôi không thể hiểu được đầu hay đuôi của điều đó. Làm cách nào để giữ cookie giữa các yêu cầu POST?

39 hữu ích 3 bình luận 137k xem chia sẻ 3 bình luận 137k xem chia sẻ