首页 > 解决方案 > 未从 Javascript 站点(python)获取所有 cookie

问题描述

我正在尝试制作一个检查滑雪缆车预订开口的程序。到目前为止,我能够从 API 获得正确的响应,但它只能在某些 cookie 过期之前工作大约 15 分钟。这是我目前的过程。

转到站点:https ://www.keystoneresort.com/plan-your-trip/lift-access/tickets.aspx并查看网络响应​​,然后将突出显示的 xhr 脚本复制为 curl(bash)。 有问题的网站/api 然后我将 curl(bash) 导入邮递员并得到响应:

邮递员回应

然后我从邮递员那里获取代码,这样我就可以在 python 中运行它 邮递员使用的代码

import requests, json
url = "https://www.keystoneresort.com/api/LiftAccessApi/GetLiftTicketControlReservationInventory? 
startDate=01%2F21%2F2021&endDate=03%2F06%2F2021&_=1611254694375"
payload={}
headers = {
  'authority': 'www.keystoneresort.com',
  'accept': 'application/json, text/javascript, */*; q=0.01',
  'x-queueit-ajaxpageurl': 'https%3A%2F%2Fwww.keystoneresort.com%2Fplan-your-trip%2Flift-        
access%2Ftickets.aspx%3FstartDate%3D01%252F23%252F2021%26numberOfDays%3D1%26ageGroup%3DAdult',
  'x-requested-with': 'XMLHttpRequest',
  '__requestverificationtoken': 'mbVIzNL1qZUKDT3Re8H9kXVNoYLmQPC-tgLCSbM_inVSN1v_2Pei-A-    GWDaKL7i6NRIVTr0lnlmiYACNvfmd6Zzsikk1:HI8y8wZJXMuP7nsTJwS-adYZu7FoHVPVHWY5naHRiB71dg2PzehuQa8WJy418eIrVqwmvhw-a1F34sJ425mXzWpEANE1',
  'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36',
  'save-data': 'off',
  'sec-fetch-site': 'same-origin',
  'sec-fetch-mode': 'cors',
  'sec-fetch-dest': 'empty',
  'referer': 'https://www.keystoneresort.com/plan-your-trip/lift-access/tickets.aspx?    startDate=01%2F23%2F2021&numberOfDays=1&ageGroup=Adult',
  'accept-language': 'en-US,en;q=0.9',
  'cookie': 'QueueITAccepted-SDFrts345E-V3_vailresortsecomm1=EventId%3Dvailresortsecomm1%26QueueId%3D96d15411-09e1-4443-89a3-f0d6e4cef5d5%26RedirectType%3Dsafetynet%26IssueTime%3D1611254692%26Hash%3D06e1aecd2d5cdf64363d53f4fc63f1c22316f604895cd3ecfd1d8b03f86ba36a; TS019b45a2=01d73c084b0f6abf04d77ffeb9e37953f3d047ebae13a4f5ffa8e69045bf156b4959e093cf10f08359c6f45a491fdc474e068898a9; TS01f060ff=01d73c084b0f6abf04d77ffeb9e37953f3d047ebae13a4f5ffa8e69045bf156b4959e093cf10f08359c6f45a491fdc474e068898a9; AMCV_974C370453295F9A0A490D44%40AdobeOrg=1406116232%7CMCIDTS%7C18649%7CMCMID%7C30886069937558409272202898840476568322%7CMCAAMLH-1611859494%7C9%7CMCAAMB-1611859494%7CRKhpRz8krg2tLO6pguXWp5olkAcUniQYPHaMWWgdJ3xzPWQmdj0y%7CMCOPTOUT-1611261894s%7CNONE%7CMCAID%7CNONE%7CvVersion%7C2.5.0;'
}
s = requests.Session()
y = s.get(url)
print(y)
response = requests.request("GET", url, headers=headers, data=payload)
todos = json.loads(response.text)
x = json.dumps(todos, indent = 2)
print(x)

现在,如果您在 python 中运行它,它将无法工作,因为当有人尝试它时,该会话的 cookie 已经过期。所以如果你想看看我在做什么,你必须按照我上面列出的过程。我得到的响应看起来像这样,这是我想要的,但只是为了它不会过期。 Python 响应

我已经广泛研究了使用请求和硒获取 cookie 的不同方式。我尝试过的所有解决方案都只获得了一些 cookie,而不是全部。我需要在我的代码中列出的“cookie”标题中的那些,但我还没有找到一种方法来做到这一点,而不刷新页面并在邮递员中发布 curl 并复制响应。总的来说,我对 python 和编码还很陌生,所以如果答案非常简单,请不要对我太苛刻。

我认为其中一些 cookie 是由 java 脚本呈现的,这可能是问题的一部分。我还可以删除我的代码中的一些 cookie 并让它仍然有效(直到它过期)。如果有更简单的方法来做我正在做的事情,请告诉我。

谢谢。

标签: pythonseleniumcookies

解决方案


推荐阅读