Selenium之复用浏览器和Cookie获取

复用已有浏览器

在执行UI自动化时,每次运行脚本都会弹出一个浏览器来,并且会从头执行,这样会带来的问题是,中间步骤如果出现问题则不好进行调试,使用复用浏览器可以从中间指定的页面进行以后的步骤执行。

  1. 配置Chrome浏览器环境变量

  2. 打开浏览器的debug模式,调试端口任意设置

    1
    2
    3
    jingdeMacBook-Pro:~ apple$ chrome --remote-debugging-port=9222

    DevTools listening on ws://127.0.0.1:9222/devtools/browser/4c3364f0-e9fd-4f73-b71d-63a76c08482e

    注意:

    • 打开浏览器debug模式,把其他所有浏览器都关掉
    • 已打开的debug模式的浏览器不要关闭
  3. 在脚本中加入调试参数

    1
    2
    3
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("debuggerAddress","127.0.0.1:9222");
    driver = new ChromeDriver(options);

Chrome浏览器Mac环境变量配置

  1. 查看Chrome浏览器的启动文件,路径:/Applications/Google\ Chrome.app/Contents/MacOS 注意:空格地方加斜杠

    1
    2
    3
    jingdeMacBook-Pro:~ apple$ cd /Applications/Google\ Chrome.app/Contents/MacOS
    jingdeMacBook-Pro:MacOS apple$ ls
    Google Chrome
  2. 配置环境变量,sudo vim ~/.bash_profile,配置以下内容

    1
    2
    # 配置环境变量路径,并起个别名,注意转义符\和space
    alias chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'
  1. source ~/.bash_profile配置文件生效即可,并进行验证

    1
    2
    3
    jingdeMacBook-Pro:~ apple$ source ~/.bash_profile
    jingdeMacBook-Pro:~ apple$ chrome --version
    Google Chrome 86.0.4240.198

获取Cookie

方法一:通过WebDriver获取Cookie

方法二:通过JS获取Cookie

1
console.log(document.cookie)

image-20201127173459906

注意:这种方式取出的cookie值不准确,需要找到接口的请求获取到对应的cookie

image-20201130141220302

使用awk处理cookie格式,得到我们需要的内容

awk命令:

1
echo "{cookie}" | awk 'BEGIN{RS="; ";FS="="}{print "driver.manage().addCookie(new Cookie(\""$1"\", \""$2"\"));"}'

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
jingdeMacBook-Pro:~ apple$ echo "pgv_pvid=965326920; wwrtx.c_gdpr=0; pac_uid=0_aee823a5acb34; wwrtx.i18n_lan=zh; _ga=GA1.2.486968943.1606468059; wwrtx.ref=direct; wwrtx.refid=4250759204197565; wwrtx.ltype=1; wxpay.corpid=1970324947149288; wxpay.vid=1688850129600022; wwrtx.vid=1688850129600022; ww_rtkey=1166bq8; Hm_lvt_9364e629af24cb52acc78b43e8c9f77d=1606468059,1606468075,1606469576,1606714819; Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d=1606714819; _gid=GA1.2.1004022239.1606714820; wwrtx.d2st=a532885; wwrtx.sid=6QnZz9M3D9-XwaqXVRhlplYnrydnCorqqH61w8jMbhRbcTni27ASNi5GwQRoRc5t; wwrtx.vst=ls7NqhOyvl2ER2hxI3QOsG8TBvjH-uVP7U8ymdRREjZQ5t5Nagz1nbTVjEPlAmowyB1hK90UquW63nmuOgtSNryFZYa916K9L8enRAa-RMt73xWiFHBYjCToPxoNsUD38YMpiVYPLsLdTrlR0oIuBSZmznOonOYr8i7W5KoCVfyeV6QK0QesguC5GqNjDGq9btyGaDpKJr18dE_j-Hl0FrVmGMig4VJhv_UKNHEYKQtTEsu3uFCfTquGCh1VUZZQfxs2w_aLM4_5flndp7EVEg" | awk 'BEGIN{RS="; ";FS="="}{print "driver.manage().addCookie(new Cookie(\""$1"\", \""$2"\"));"}'
driver.manage().addCookie(new Cookie("pgv_pvid", "965326920"));
driver.manage().addCookie(new Cookie(" wwrtx.c_gdpr", "0"));
driver.manage().addCookie(new Cookie(" pac_uid", "0_aee823a5acb34"));
driver.manage().addCookie(new Cookie(" wwrtx.i18n_lan", "zh"));
driver.manage().addCookie(new Cookie(" _ga", "GA1.2.486968943.1606468059"));
driver.manage().addCookie(new Cookie(" wwrtx.ref", "direct"));
driver.manage().addCookie(new Cookie(" wwrtx.refid", "4250759204197565"));
driver.manage().addCookie(new Cookie(" wwrtx.ltype", "1"));
driver.manage().addCookie(new Cookie(" wxpay.corpid", "1970324947149288"));
driver.manage().addCookie(new Cookie(" wxpay.vid", "1688850129600022"));
driver.manage().addCookie(new Cookie(" wwrtx.vid", "1688850129600022"));
driver.manage().addCookie(new Cookie(" ww_rtkey", "1166bq8"));
driver.manage().addCookie(new Cookie(" Hm_lvt_9364e629af24cb52acc78b43e8c9f77d", "1606468059,1606468075,1606469576,1606714819"));
driver.manage().addCookie(new Cookie(" Hm_lpvt_9364e629af24cb52acc78b43e8c9f77d", "1606714819"));
driver.manage().addCookie(new Cookie(" _gid", "GA1.2.1004022239.1606714820"));
driver.manage().addCookie(new Cookie(" wwrtx.d2st", "a532885"));
driver.manage().addCookie(new Cookie(" wwrtx.sid", "6QnZz9M3D9-XwaqXVRhlplYnrydnCorqqH61w8jMbhRbcTni27ASNi5GwQRoRc5t"));
driver.manage().addCookie(new Cookie(" wwrtx.vst", "ls7NqhOyvl2ER2hxI3QOsG8TBvjH-uVP7U8ymdRREjZQ5t5Nagz1nbTVjEPlAmowyB1hK90UquW63nmuOgtSNryFZYa916K9L8enRAa-RMt73xWiFHBYjCToPxoNsUD38YMpiVYPLsLdTrlR0oIuBSZmznOonOYr8i7W5KoCVfyeV6QK0QesguC5GqNjDGq9btyGaDpKJr18dE_j-Hl0FrVmGMig4VJhv_UKNHEYKQtTEsu3uFCfTquGCh1VUZZQfxs2w_aLM4_5flndp7EVEg
"));