我正试图通过外观在网络浏览器中打开一个requests
会话,看来使用硒是最有效/最佳的方法。
我的代码:
import requests
from selenium import webdriver
from time import sleep
s = requests.Session()
s.get('https://www.sotf.com/en/nike/man/footwear/nike--joyride--cc3--setter--sneakers--at6395.html?RwDet=true&articoli_ID=17911')
driver = webdriver.Safari()
driver.get("https://www.sotf.com/")
for cookie in s.cookies:
driver.add_cookie({
'name': cookie.name,
'value': cookie.value,
'path': '/',
'domain': cookie.domain,
})
driver.refresh()
sleep(1000)
在打印s.cookies.get_dict()
时,我得到以下cookie:
{'__cfduid': 'dc81dd94c218523ce8161e4254d2652a01566815239', 'PHPSESSID': 'qhm7109shdrhu9uv3t38ani9df'}
问题是浏览器并没有使用这些cookie,当检查野生动物园内部的cookie(使用inspect元素)时__cfduid
看起来应该像它,但是出于未知的原因,我看到两个{ {1}},正确的域属性设置为PHPSESSID
而不是.wwww.sotf.com
:
非常感谢。
答案 0 :(得分:7)
for i in xrange()
cookie被存储两次,因为您两次打开页面-第一次使用空cookie罐打开页面,而服务器设置了第一个不安全的PHPSESSID
cookie,然后复制了第二个PHPSESSID
中的一个。登陆主机后,清除cookie。在下面的示例中,我导航到requests.Session
,因为通常可以更快地加载404页,清除默认cookie,然后从https://www.sotf.com/404
的cookie罐中复制cookie:
requests
输出:
import contextlib
import requests
from selenium import webdriver
from time import sleep
@contextlib.contextmanager
def init_driver():
d = webdriver.Chrome()
yield d
d.quit()
if __name__ == '__main__':
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'en-US,en;q=0.9,de;q=0.8',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
}
params = {
'RwDet': 'true',
'articoli_ID': '17911',
}
s = requests.Session()
s.get('https://www.sotf.com/en/nike/man/footwear/nike--joyride--cc3--setter--sneakers--at6395.html', headers=headers, params=params)
print('cookies in requests jar:')
for c in s.cookies:
print(c)
with init_driver() as driver:
# 404 pages are usually faster to load
driver.get("https://www.sotf.com/404")
driver.delete_all_cookies()
for cookie in s.cookies:
driver.add_cookie({
'name': cookie.name,
'value': cookie.value,
'path': '/',
'domain': cookie.domain,
})
driver.get("https://www.sotf.com/")
print('cookies in selenium jar:')
for c in driver.get_cookies():
print(c)