Selenium 通过 Chrome 获取 cookie 并传递给 requests 教程

老王今天发现一个爬虫脚本不工作了,看了下日志发现是 Selenium 获取的 cookie 在传给 requests 的时候报错了,本文记录下 Selenium 通过 Chrome 获取 cookie 并传递给 requests 的教程。

一、旧写法报错内容

通用代码:

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path='/root/chromedriver', options=chrome_options)

这是之前老王的 cookie 传递方法,用的 cookiejar_from_dict 方法将由 Selenium 得到的 cookies 直接转成 requests.Session() 需要的格式:

session = requests.Session()
driver.get(url)
cookies = driver.get_cookies()
session.cookies = requests.utils.cookiejar_from_dict(cookies)
resp = session.get(url)

报错:TypeError: list indices must be integers or slices, not dict

二、修改后的传递方法

修改后的代码,借助 RequestsCookieJar 逐一手动添加 Cookie 的 name 和 value:

session = requests.Session()
driver.get(url)
cookies = driver.get_cookies()
jar = RequestsCookieJar()
for cookie in cookies:
    jar.set(cookie['name'], cookie['value'])
session.cookies = jar
resp = session.get(url)

修改后爬虫脚本就能正常运行了。

赞(0)
关注我们
未经允许不得转载:老王博客 » Selenium 通过 Chrome 获取 cookie 并传递给 requests 教程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址