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["//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["//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ẻ 0 bình luận 170k xem chia sẻ
answer
147
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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
2là html trực tiếp của trang bạn muốn mở và bạn có thể sử dụng 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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
3để 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ẻ 5 bình luận chia sẻ
answer
157
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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
2là html trực tiếp của trang bạn muốn mở và bạn có thể sử dụng 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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
3để 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['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
147 hữu ích 5 bình luận chia sẻ 5 bình luận chia sẻ 4 bình luận chia sẻ
147 hữu ích 5 bình luận chia sẻ 4 bình luận chia sẻ
Đâ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ẻ
//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata
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:
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 .
r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
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:
User Auth Check
Either is not active or the session might have expired. Please login again.
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:
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 đỡ.
s = requests.Session[]
s.get['//httpbin.org/cookies/set/sessioncookie/123456789']
r = s.get["//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?
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. 3 bình luận 137k xem chia sẻ
Giới thiệu
Hệ thống HTTP không có chỗ lưu trữ, thế nên sessions cung cấp cho ta một cách để lưu trữ thông tin các yêu cầu từ người sử dụng. Laravel cung cấp đầy đủ hệ thống thống nhất thông qua API để hỗ trợ việc này. Hỗ trợ các back-ends nổi tiếng như Memcached, Redis, và cơ sở dữ liệu đã được bao gồm sẵn trong gói.
Cấu hình
Thông tin cấu hình của sessions được chứa tại config/session.php. Hãy chắc rằng bạn nắm rõ tất cả các thông tin cấu hình của session trước khi chỉnh sửa lại tập tin này. Theo mặc định, Laravel sẽ cấu hình sử dụng file cho session driver, nó sẽ hoạt động tốt trên mọi ứng dụng. Đối với các ứng dụng chạy thực tế, bạn có thể sử dụng memcached hoặc redis drivers để cho hiệu suất sử dụng đạt cao hơn.
Các session driver được định nghĩa là nơi lưu trữ và truy suất dữ liệu session thông qua các yêu cầu. Laravel đã tích hợp sẵn một số session driver sau:
6 - sessions sẽ chứa tạiimport 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['//www.example.com/login.php', login_data] resp = opener.open['//www.example.com/hiddenpage.php'] print resp.read[]
7. -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['//www.example.com/login.php', login_data] resp = opener.open['//www.example.com/hiddenpage.php'] print resp.read[]
8 - sessions sẽ lưu có bảo mật, mã hóa bởi cookies. -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['//www.example.com/login.php', login_data] resp = opener.open['//www.example.com/hiddenpage.php'] print resp.read[]
9 - sessions sẽ lưu trong CSDL được dùng trong ứng dụng của bạn. -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['//www.example.com/login.php', login_data] resp = opener.open['//www.example.com/hiddenpage.php'] print resp.read[]
0 /from requests import session payload = { 'action': 'login', 'username': USERNAME, 'password': PASSWORD } with session[] as c: c.post['//example.com/login.php', data=payload] response = c.get['//example.com/protected_page.php'] print[response.headers] print[response.text]
1 - session sẽ lưu và truy suất nhanh hơn, dựa trên cache. -from requests import session payload = { 'action': 'login', 'username': USERNAME, 'password': PASSWORD } with session[] as c: c.post['//example.com/login.php', data=payload] response = c.get['//example.com/protected_page.php'] print[response.headers] print[response.text]
2 - sessions sẽ được lưu trong mảng PHP thông thường khá đơn giản và tồn tại rất lâu.from requests import session payload = { 'action': 'login', 'username': USERNAME, 'password': PASSWORD } with session[] as c: c.post['//example.com/login.php', data=payload] response = c.get['//example.com/protected_page.php'] print[response.headers] print[response.text]
Lưu ý : Với array driver chỉ nên sử dụng khi chạy
3 để có các dữ liệu tồn tại trong thời gian dài. Với array driver chỉ nên sử dụng khi chạy from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
3 để có các dữ liệu tồn tại trong thời gian dài.Điều kiện tiên quyết của Driver
1. Cơ sở dữ liệu Để sử dụng
9 session driver, bạn phải thiết lập bảng chứa các dữ liệu session trong cơ sở dữ liệu. Bên dưới là một ví dụ Schema dùng tạo bảng: Để sử dụng 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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
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['//www.example.com/login.php', login_data]
resp = opener.open['//www.example.com/hiddenpage.php']
print resp.read[]
9 session driver, bạn phải thiết lập bảng chứa các dữ liệu session trong cơ sở dữ liệu. Bên dưới là một ví dụ Schema dùng tạo bảng:Schema::create['sessions', function [$table] {
$table->string['id']->unique[];
$table->integer['user_id']->nullable[];
$table->string['ip_address', 45]->nullable[];
$table->text['user_agent']->nullable[];
$table->text['payload'];
$table->integer['last_activity'];
}];
Bạn có thể sử dụng lệnh
from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
5 trong Artisan command để tạo tự động Migration này!php artisan session:table
composer dump-autoload
php artisan migrate
2.Redis Trước khi dùng
6 cho Laravel, Bạn cần phải cài đặt gói from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
7 thông qua from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
8. Trước khi dùng from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
6 cho Laravel, Bạn cần phải cài đặt gói from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
7 thông qua from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
8.Những cân nhắc sử dụng Session
Laravel framework dùng
from requests import session
payload = {
'action': 'login',
'username': USERNAME,
'password': PASSWORD
}
with session[] as c:
c.post['//example.com/login.php', data=payload]
response = c.get['//example.com/protected_page.php']
print[response.headers]
print[response.text]
9 session trong nội bộ, thế nên bạn không nên đặt tên của r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
0 trùng với tên đó.Nếu bạn muốn tất cả các dữ liệu
r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
1 của bạn được mã hóa, hãy thiết lặp r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
2 với giá trị là r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
3.Cách dùng cơ bản
Truy cập vào Session
Trước tiên, để truy cập
r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
0. Bạn cần phải truy cập ứng dụng thông qua các yêu cầu r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
5, đó là các phương thức r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
6 mà bạn muốn hướng đến. Hãy nhớ rằng, các phương thức r = requests.get['//sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata']
7 phụ thuộc vào Laravel service container:Laravel service container: