在做自动化的时候,每次都会新打开一个browser, 于是得重新登录, 有时候登录是件麻烦且费时间的事情。 以前用webdriver的时候,先登录,存储cookie信息,下次直接带上就行了。 如果用Playwright,该怎么办呢?
我们来看命令选项,看有没有解决方案。 选项:
-V, --version 输出版本号
-b, --browser <browserType> 浏览器类型
--color-scheme <scheme> 更改主题 取值 "light" 或 "dark"
--device <deviceName> 模拟设备,例如 "iPhone 11"
--geolocation <coordinates> 指定地理位置 例如 "37.819722,-122.478611"
--lang <language> 指定语言区域 "en-GB"
--save-storage <filename> 保存浏览器状态到指定文件
--load-storage <filename> 载入指定文件浏览器状态
--proxy-server <proxy> 指定代理服务器 例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"
--timezone <time zone> 失去设置 例如 "Europe/Rome"
--timeout <timeout> 超时设置,单位毫秒 (default: "10000")
--user-agent <ua string> 指定UA
--viewport-size <size> 指定浏览器像素 "1280, 720"
命令:
open [url] 打开URL或用-b, --browser指定浏览器
cr [url] 打开URL用Chromium
ff [url] 打开URL用Firefox
wk [url] 打开URL用WebKit
codegen [options] [url] 打开页面生成代码
screenshot [options] <url> <filename> 页面截图
pdf [options] <url> <filename> 保存页面为pdf
install 确保安装必要的浏览器驱动
help [command] 帮助
可以看到, --save-storage与--load-storage是个非常实用的命令。 例如用下面命令访问网站并登陆,关闭浏览器时自动把cookie等浏览器信息存入hik文件中:
python -m playwright cr https://XXX.top --save-storage cway
使用时用下述命令直接调用,打开页面即为登陆状态:
python -m playwright cr https://XXX.top --load-storage cway
假如我有多个网站帐号就可以存在多个不同文件,使用时输入命令即可,文件默认储存在当前执行命令的目录
在网站录制操作的过程中也可以用--sava,例如:
python -m playwright codegen --target python -o 'login.py' https://xxx.top --save-storage cway
这样py代码中也生成了保存信息到本地的功能代码,适合于更新帐号信息,然后录制操作只用录制登陆后的页面即可,如下命令,直接读取已登陆的状态,然后就能在已登陆状态下录制:
python -m playwright codegen --target python -o 'run.py' https://xxx.top --load-storage cway
然后我们看一下录制的代码:
def run(playwright,phonenumber):
browser = playwright.chromium.launch(headless=True)
context = browser.new_context(storage_state="C:\\work\\gitee\\arrangevedio\\cway")
# Open new page
page = context.new_page()
打开保存的文件,发现里面确实存的是cookie相关字典。 运行起来会省时一些。 在这个里面做一个判断, 如果页面是我们需要直接打开的页面,即cookie没过期,就可以直接操作。 如果页面是登录页面,那么就要做一次登录操作了。 也可以读这个文件里面是否过期的字段。 如果过期,就登录一次。 在操作的时候,我们做一次录制,替换掉过期的cookie文件。 那么我们得启动一个进程了。
尝试下来,感觉还可以。