selenium遇到302无法操作原网址cookie

from selenium import webdriver

url = 'https://yuyue.36524f.com/Home/Audit/home.shtml'

options = webdriver.ChromeOptions()

options.add_argument('user-agent="Mozilla/5.0 (Linux; Android 5.1.1; SKW-A0 Build/LMY49I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Safari/537.36 MMWEBID/1075 MicroMessenger/7.0.6.1460(0x27000634) Process/tools NetType/WIFI Language/zh_CN"')

browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',options=options)

browser.get(url)

cookies = {'name': 'PHPSESSID', 'value': 'lbvdl6v4ilcjq7n34njammb173', 'domain': 'yuyue.36524f.com'}

browser.delete_cookie('PHPSESSID')

browser.add_cookie(cookie_dict=cookies)

browser.get(url)

这个链接是只能在微信移动端中打开,所以需要完善ua和cookie,测试之后发现需要name为‘PHPSESSID’的cookie,value为指定的“lbvdl6v4ilcjq7n34njammb173”。否则会302跳转到微信的第三方网址报错。
selenium遇到302无法操作原网址cookie
运行上面代码后,页面还是跳转到微信的报错页面。fiddler抓包之后看到cookies
selenium遇到302无法操作原网址cookie
第二次get(url)之后得到了两个PHPSESSID的cookies,第一个是页面生成的,第二个是代码添加的,在添加cookie之前已经delete了,但是操作的可能是302跳转到的报错页面,在代码中print cookies也为空,请问这种情况该如何才能操作到跳转之前的cookie,或者如何用selenium禁止重定向呢?
感谢!


回答:

现在网站流行使用单点登录SSO的方式来解决认证问题。这在访问网站时会首先跳转到三方网站认证成功后再返回来继续操作。然而 selnium 内建的 set_cookie 方法只对当前域名生效。这就无法使用 set_cookie 来直接为 有跳转认证功能网站的cookie赋值。

好在 chrome 浏览器 提供了 DevTools Protocol 标准协议 提供了一个可行的方案。
参考
而selenium 也为Chrome为该协议提供了支持。

那么根据上边的方法,我们就可以在初始化Chrome之后,直接写入目标网站的cookie数据。

class Browser:

def __init__():

...

self.driver = webdirver.Chrome()

...

def _write_cookie(self, cookie_values):

"""Set token value to cookie"""

if self._is_chromium_core():

self.driver.execute_cdp_cmd('Network.enable', {})

# Set cookie field

for cookie in cookie_values:

# Set the actual cookie

self.driver.execute_cdp_cmd('Network.setCookie', cookie)

# Disable network tracking

self.driver.execute_cdp_cmd('Network.disable', {})

这个方法对 Edge(使用chromium内核)浏览器也生效。

以上是 selenium遇到302无法操作原网址cookie 的全部内容, 来源链接: utcz.com/a/157408.html

回到顶部