Jayson

老牛亦解韶光贵,不等扬鞭自奋蹄。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  68 随笔 :: 0 文章 :: 3 评论 :: 95770 阅读
复制代码
 1 from selenium import webdriver
 2 
 3 driver = webdriver.PhantomJS(executable_path='G:/OpenSources/phantomjs-2.1.1-windows/bin/phantomjs')
 4 driver.get("http://pythonscraping.com")
 5 driver.implicitly_wait(1)
 6 print(driver.get_cookies())
 7 
 8 savedCookies = driver.get_cookies()10 
11 driver2 = webdriver.PhantomJS(executable_path='G:/OpenSources/phantomjs-2.1.1-windows/bin/phantomjs')
12 driver2.get("http://pythonscraping.com")
13 driver2.delete_all_cookies()
14 for cookie in savedCookies:
15     driver2.add_cookie(cookie)
16 
17 driver2.get("http://pythonscraping.com")
18 driver2.implicitly_wait(1)
19 print(driver2.get_cookies())
复制代码

以上代码15行报错: "errorMessage":"Can only set Cookies for the current domain"

将15行代码改为:

1 driver2.add_cookie({k: cookie[k] for k in ('name', 'value', 'domain', 'path', 'expiry') if k in cookie})

修改后报错: "errorMessage":"Unable to set Cookie"

最终修改:

复制代码
 1 from selenium import webdriver
 2 import time
 3 
 4 driver = webdriver.PhantomJS(executable_path='G:/OpenSources/phantomjs-2.1.1-windows/bin/phantomjs')
 5 driver.get("http://pythonscraping.com")
 6 driver.implicitly_wait(1)
 7 print(driver.get_cookies())
 8 
 9 savedCookies = driver.get_cookies()11 
12 driver2 = webdriver.PhantomJS(executable_path='G:/OpenSources/phantomjs-2.1.1-windows/bin/phantomjs')
13 driver2.get("http://pythonscraping.com")
14 driver2.delete_all_cookies()
15 for cookie in savedCookies:
16     # fix the problem-> "errorMessage":"Unable to set Cookie"
17     for k in ('name', 'value', 'domain', 'path', 'expiry'):
18         if k not in list(cookie.keys()):
19             if k == 'expiry':
20                 t = time.time()
21                 cookie[k] = int(t) # 时间戳 秒
22     # fix the problem-> "errorMessage":"Can only set Cookies for the current domain"
23     driver2.add_cookie({k: cookie[k] for k in ('name', 'value', 'domain', 'path', 'expiry') if k in cookie})
24 
25 driver2.get("http://pythonscraping.com")
26 driver2.implicitly_wait(1)
27 print(driver2.get_cookies())
复制代码

 在这个例子中,第一个 webdriver获得了一个网站,打印 cookie 并把它们保存到变量savedCookies里。第二个webdriver加载同一个网站(技术提示:必须首先加载网站,这样Selenium 才能知道cookie 属于哪个网站,即使加载网站的行为对我们没任何用处),删除所有的cookie ,然后替换成第一个webdriver得到的cookie 。当再次加载这个页面时,两组cookie 的时间戳、源代码和其他信息应该完全一致。

posted on   jaysoncho  阅读(5515)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示