首页 > 解决方案 > Python - TypeError:列表索引必须是整数或切片,而不是尝试设置 cookie 时的 dict

问题描述

我试图在遍历从 selenium 获得的 cookie 时设置 cookie。尝试设置它们时,我收到 ***TypeError 错误:列表索引必须是整数或切片,而不是 dict ***。Bellow 是我的代码、字典和输出。

代码:

s = requests.Session()
options = Options()
options.headless = True
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.50 Safari/537.36'    
options.add_argument('user-agent={0}'.format(user_agent))
driver = webdriver.Chrome(options=options,executable_path=r'./chromedriver')
driver.get("https://us.louisvuitton.com/eng-us/products/pocket-organizer-damier-graphite-nvprod2630093v#N60432")
cookies = driver.get_cookies()
print(cookies)
for cookie in cookies:
    s.cookies.set(cookie['name'], cookie['value'])

headers3 = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)',
    'Accept': "*/*",
    'Cache-Control': "no-cache",
    'Host': "api.louisvuitton.com",
    'Accept-Encoding': "gzip, deflate",
    'Connection': "keep-alive",
    'cache-control': "no-cache",
    'Content-Type': 'application/json'
    }


t = s.get("https://api.louisvuitton.com/api/eng-us/catalog/availability/M80016",headers=headers3,cookies=cookies)

字典:

[{'domain': '.louisvuitton.com', 'expiry': 1648226950, 'httpOnly': False, 'name': 'utag_main', 'path': '/', 'secure': False, 'value': 'v_id:01786a4a2b7f00165086f404bc4000068006206000b7e$_sn:1$_se:7$_ss:0$_st:1616692750887$ses_id:1616690948992%3Bexp-session$_pn:1%3Bexp-session$dc_visit:1$dc_event:3%3Bexp-session$dc_region:eu-central-1%3Bexp-session'}, {'domain': '.louisvuitton.com', 'expiry': 1624466950, 'httpOnly': False, 'name': '_fbp', 'path': '/', 'secure': False, 'value': 'fb.1.1616690950154.932434373'}, {'domain': '.louisvuitton.com', 'expiry': 1650854950, 'httpOnly': False, 'name': '_cs_id', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'a3e02745-7dfc-a2a0-a1a1-cbede54a110c.1616690950.1.1616690950.1616690950.1.1650854950129.Lax.0'}, {'domain': '.louisvuitton.com', 'expiry': 1650854950, 'httpOnly': False, 'name': '_cs_c', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1'}, {'domain': '.louisvuitton.com', 'expiry': 1650877649, 'httpOnly': False, 'name': '_sctr', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1|1616648400000'}, {'domain': '.louisvuitton.com', 'expiry': 1624466950, 'httpOnly': False, 'name': '_gcl_au', 'path': '/', 'secure': False, 'value': '1.1.1912920712.1616690950'}, {'domain': '.louisvuitton.com', 'httpOnly': False, 'name': 'ATGID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'anonymous'}, {'domain': '.louisvuitton.com', 'expiry': 1616692749, 'httpOnly': True, 'name': 'anonymous_session', 'path': '/', 'secure': False, 'value': 'true'}, {'domain': '.louisvuitton.com', 'expiry': 1616777349, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.383228537.1616690950'}, {'domain': '.louisvuitton.com', 'expiry': 1648226950, 'httpOnly': False, 'name': 'qb_permanent', 'path': '/', 'secure': False, 'value': '1p7abdz2zl4-0kmp41rwm-vk4xn8o:1:1:1:1:0::0:1:0:BgXL8F:BgXL8F:::::173.237.207.43:road%20town:13462:british%20virgin%20islands:VG:18.47:-64.65:unknown:unknown:british%20virgin%20islands:8960:migrated|1616690950237:EbFa==B=CRhL=Et&E34W==B=CSWN=N+&E340==B=CTUC=Hq&FDMk==B=CTqz=Dh::XhqSjLk:XhqSi1O:0:0:0::0:0:.louisvuitton.com:0'}, {'domain': '.louisvuitton.com', 'httpOnly': False, 'name': 'qb_204956_bounce', 'path': '/', 'secure': False, 'value': '1'}, {'domain': '.louisvuitton.com', 'httpOnly': True, 'name': '_dynSessConf', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '-3122334132653973729'}, {'domain': '.louisvuitton.com', 'httpOnly': False, 'name': 'ATG_SESSION_ID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'buv0ClcHVCfYOAGU9TmEXE94.front71-prd'}, {'domain': '.us.louisvuitton.com', 'expiry': 1648226950, 'httpOnly': False, 'name': '_pin_unauth', 'path': '/', 'secure': False, 'value': 'dWlkPVl6QmpPV1U0WXpjdFpqZGxOQzAwT1RrNUxXRTJZamN0WkdSa01UWmtZMk15WlRFMw'}, {'domain': '.louisvuitton.com', 'expiry': 1650877648, 'httpOnly': False, 'name': '_scid', 'path': '/', 'sameSite': 'Lax', 'secure': True, 'value': '042e18dd-eca1-4060-8501-c2ad57e5a49a'}, {'domain': '.louisvuitton.com', 'expiry': 1650818949, 'httpOnly': False, 'name': 'OPTOUTMULTI', 'path': '/', 'secure': False, 'value': '0:0%7Cc1:0%7Cc2:0%7Cc4:0%7Cc3:0'}, {'domain': '.louisvuitton.com', 'expiry': 1616698148, 'httpOnly': True, 'name': 'ak_bmsc', 'path': '/', 'secure': False, 'value': '3D64051397F4D902D64BC80FD9620E11~000000000000000000000000000000~YAAQNPzDF8k4EUd4AQAA3SxKagsOLfmIrUpwFWgTdtVviG94wwMEZrPt8z6V90hPzx9xt4Ym+6RSRN3E4LhjlN7CNvh810wMdj5R7wqYr6Du7WxkAZ8YjZ3RnNdSO+e0LDOvL2podxE9WYNsG9poHlKcBYg3+nby2TffQ1NwJN7MAJT6jVF7uwk4mrpQ850stNNpSNdst7ytqB6HZX8rGgv+eLTgEIap4vAsuO0UiM67iE8tyOZrJIyN65pjem1aHgoWQsOxWg6evnNp7Kyj7AkJZZT7apRJfhwJce2Vw4kez2SbwefOfh0ZbQfryxyVo+hAHz4hF1YRXBx2VMmU/QYEyj8Ry7BFH2Eu/+uMjFo+it6uVOYsxRDlzk8rwyrslvOIgzJbMpZDJAqRu7uD+xhZkIj2BC286YMNRYRXXim2ScGbGgMq8qFBGQsMF0m+a6W1/7U+mBetgI3KjC4N/8RXpyQB2PIoPnCIJMvUXN0xhNofWWqhFZAl0Wh2jCfY7K8pLO/gvQeQOMfh8FotCWlFT0kWYGobbaO2mRdCSSfHQj0='}, {'domain': '.louisvuitton.com', 'expiry': 1648226948, 'httpOnly': False, 'name': '_qubitTracker', 'path': '/', 'secure': False, 'value': '1p7abdz2zl4-0kmp41rwm-vk4xn8o'}, {'domain': '.louisvuitton.com', 'expiry': 1619369348, 'httpOnly': False, 'name': 'lv-dispatch', 'path': '/', 'secure': False, 'value': 'eng-us'}, {'domain': '.louisvuitton.com', 'expiry': 1617295748, 'httpOnly': False, 'name': 'RT', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '"z=1&dm=louisvuitton.com&si=ba5cd8cd-1f62-4ded-ad7a-ddd68fabb390&ss=kmp41qyq&sl=0&tt=0&bcn=%2F%2F173c5b0e.akstat.io%2F"'}, {'domain': '.louisvuitton.com', 'httpOnly': True, 'name': 'JSESSIONID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'buv0ClcHVCfYOAGU9TmEXE94.front71-prd'}, {'domain': '.louisvuitton.com', 'expiry': 1619369348, 'httpOnly': False, 'name': 'lv-dispatch-url', 'path': '/', 'secure': False, 'value': 'https://us.louisvuitton.com/eng-us/products/pocket-organizer-damier-graphite-nvprod2630093v#N60432'}, {'domain': '.louisvuitton.com', 'expiry': 1616692749, 'httpOnly': False, 'name': '_cs_mk', 'path': '/', 'secure': False, 'value': '0.5489998759169905_1616690949612'}, {'domain': '.louisvuitton.com', 'expiry': 1616705348, 'httpOnly': True, 'name': 'bm_sz', 'path': '/', 'secure': False, 'value': 'CA40D05E3CC174D94E3E50A07B708C00~YAAQNPzDF4k4EUd4AQAA7idKagt0PLQO2+uh6nteH86dioN0HMs1OnvtapGX6e0lPezFhpj+MX7Ic3t8xenywKmBWLyFQ1wNZt+3wjvQdVTc9lQ3mDoIUlw4xV0Lh1y7sdgdLt56kC7l6OochKWr/mmGBCBHoWkz6s4Gb8d2adQ0KrTo7p8QVvQucglkr+VWySs3orWN'}, {'domain': '.louisvuitton.com', 'expiry': 1648226949, 'httpOnly': False, 'name': '_abck', 'path': '/', 'secure': True, 'value': '6210CA8DFA0A496B8615F559681F1962~-1~YAAQNPzDF9c4EUd4AQAAGy5KagWp6aFlq2kyZ4EDIHSmROE/RehyIIt4O1oQP8h8dEso3gIVP/GkhGcD8uR51qYvE9bjAnkAaefWAk8D63JOWlXPomeGE/ABrcVgo5vfqq56Qa1rKo6exl+yD70vApSii4xR0XXi/c4Am1hV/l2KJO9kqeUJKJYEeq9r4WpDKHrAWM1o6PwEStjR/Kr3AgsPgL+p32Prf7v+xdiFbcu2oFzBp0OpPkW74cbUk2R1uI/NIr3+tRz9BYf7Q40DYstdLv5UAlAdWllN4eT0llmHPcjaYf1mXQ89o5qt6dpQT4Xkdl2V4MjywVshgmAVcZ9lYS1d21KO/ClHHecxVkeCp6i51cYBspEFj8lDMNyUYaqOCp4g7E9yNBp31yXY~-1~-1~-1'}, {'domain': '.louisvuitton.com', 'expiry': 1650818949, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.902468197.1616690950'}, {'domain': '.louisvuitton.com', 'expiry': 1616692750, 'httpOnly': False, 'name': 'qb_session', 'path': '/', 'secure': False, 'value': '1:1:21:EbFa=B&E34W=B&E340=B&FDMk=B:0:XhqSi1O:0:0:0:0:.louisvuitton.com'}, {'domain': '.louisvuitton.com', 'expiry': 1616694548, 'httpOnly': True, 'name': 'AKA_A2', 'path': '/', 'secure': True, 'value': 'A'}, {'domain': '.louisvuitton.com', 'expiry': 1648226949, 'httpOnly': False, 'name': 'qb_generic', 'path': '/', 'secure': False, 'value': 'qb-bis-modal-viewed=0=Z0m/o2G:XhqSi7G:.louisvuitton.com'}, {'domain': '.louisvuitton.com', 'httpOnly': True, 'name': 'SGID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'sb.springboot71-prd'}, {'domain': '.louisvuitton.com', 'expiry': 1616692750, 'httpOnly': False, 'name': '_cs_s', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '1.1'}, {'domain': 'us.louisvuitton.com', 'httpOnly': False, 'name': 'ak_cc', 'path': '/', 'secure': False, 'value': 'US'}]

错误:

Traceback (most recent call last):
  File "trial.py", line 66, in <module>
    t = s.get("https://api.louisvuitton.com/api/eng-us/catalog/availability/M80016",headers=headers3,cookies=cookies)
  File "/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg/requests/sessions.py", line 543, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg/requests/sessions.py", line 516, in request
    prep = self.prepare_request(req)
  File "/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg/requests/sessions.py", line 437, in prepare_request
    cookies = cookiejar_from_dict(cookies)
  File "/usr/local/lib/python3.8/site-packages/requests-2.24.0-py3.8.egg/requests/cookies.py", line 524, in cookiejar_from_dict
    cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
TypeError: list indices must be integers or slices, not dict

任何帮助,将不胜感激。

标签: pythonjsondictionaryfor-loop

解决方案


如何使用RequestsCookieJar

c_jar = requests.cookies.RequestsCookieJar()

for cookie in cookies:
    c_jar.set(cookie['name'], cookie['value'], domain=cookie['domain'], path=cookie['path'])

t = s.get("https://api.louisvuitton.com/api/eng-us/catalog/availability/M80016",headers=headers3,cookies=c_jar)

推荐阅读