Selenium导入Facebook Cookie失败,报InvalidArgumentException错误
我来帮你排查下问题所在,你遇到的InvalidArgumentException主要是两个关键操作错误导致的,咱们逐个解决:
1. 错误:Cookies变量是字符串而非可操作的列表
你现在把cookies存成了一个被双引号包裹的字符串,Python会把它当成普通文本处理,而不是可遍历的列表对象。当你循环for cookie in cookies时,实际上是在逐个遍历字符串的每个字符,这完全不是你想要的操作。
修正方法:
把字符串转换成Python列表,你可以用ast.literal_eval()来安全解析这个字符串,或者直接去掉外层双引号,把它定义成原生列表。
2. 错误:add_cookie的参数格式不对
driver.add_cookie()不需要你把cookie包装在{'cookie': cookie}里,它本身就接受一个包含cookie属性(比如domain、name、value)的字典——你获取的每个cookie已经是符合要求的格式了,直接传入即可。
额外注意:添加Cookie前必须先加载目标域名页面
在添加cookie之前,一定要先让浏览器访问Facebook的页面(比如https://facebook.com),这样浏览器才能确认cookie的归属域名,否则会因为域不匹配而失败。
修正后的完整代码示例
from selenium import webdriver import ast # 用来解析字符串为列表 driver = webdriver.Chrome() # 先访问Facebook页面,确保浏览器识别cookie的归属域名 driver.get('https://facebook.com') # 将字符串格式的cookies转换为Python列表 cookies_str = "[{'domain': '.facebook.com', 'expiry': 1609944355, 'httpOnly': True, 'name': 'fr', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '19KsJJcu9iZcNDw80.AWUnObiYyWlbmsSbMaAoTBQ3Qkg.BffyYn.EY.AAA.0.0.BffyYq.AWWxZSl5V8s'}, {'domain': '.facebook.com', 'expiry': 1633704358, 'httpOnly': True, 'name': 'xs', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '4%3A8K8IO-G4AqVxpw%3A2%3A1602168362%3A-1%3A-1'}, {'domain': '.facebook.com', 'expiry': 1633704358, 'httpOnly': False, 'name': 'c_user', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '100055628751137'}, {'domain': '.facebook.com', 'expiry': 1665240357, 'httpOnly': True, 'name': 'datr', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'JyZ_X5OBe55yRMjKU-d8nSYQ'}, {'domain': '.facebook.com', 'expiry': 1602773165, 'httpOnly': False, 'name': 'dpr', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '1.25'}, {'domain': '.facebook.com', 'expiry': 1602258362, 'httpOnly': True, 'name': 'spin', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'r.1002790228_b.trunk_t.1602168365_s.1_v.2_'}, {'domain': '.facebook.com', 'expiry': 1602773164, 'httpOnly': False, 'name': 'wd', 'path': '/', 'sameSite': 'Lax', 'secure': True, 'value': '1036x684'}, {'domain': '.facebook.com', 'expiry': 1665240361, 'httpOnly': True, 'name': 'sb', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'JyZ_XwAJTQy5L-W6Ivkp2MBC'}]" cookies = ast.literal_eval(cookies_str) # 循环添加每个cookie,直接传入cookie字典 for cookie in cookies: # 部分旧版本Selenium不支持sameSite字段,若报错可删除该键 if 'sameSite' in cookie: del cookie['sameSite'] driver.add_cookie(cookie) # 重新加载页面,验证cookie是否生效 driver.get('https://facebook.com')
如果还是遇到问题,可以检查下Selenium的版本,或者尝试删除cookie字典里不兼容的字段(比如sameSite)。
内容的提问来源于stack exchange,提问作者Relzon
相关产品推荐
相关产品推荐

