|

需求
由于模拟请求登录太复杂,我们想使用 Selenium 打开谷歌浏览器获取登录后的 cookie 值,然后携带 cookie 内容,请求该网站的相关接口,从而实现自动化测试。
Selenium
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
首先,我们新建一个 c# 的控制台项目,项目名称为“chrome-cookie-demo”,.net framework 版本为 4.7.2.
nuget命令如下:
安装完成Selenium.WebDriver.ChromeDriver后,会在项目debug目录生成 chromedriver.exe 文件。
Selenium.WebDriver 理解为一个抽象的接口,然后由每个浏览器自己去实现这个接口,Selenium.WebDriver 会调用 Selenium.WebDriver.ChromeDriver(chromedriver.exe),chromedriver.exe 会根据获取到的参数,启动本机安装的谷歌浏览器,然后进行相应的操作。
当然,还有一个前置条件,电脑必须安装谷歌浏览器(chrome)。
代码如下:
报错如下:
System.InvalidOperationException: session not created: This version of ChromeDriver only supports Chrome version 83
意思就是当前驱动不支持谷歌浏览器的83版本,查看本机安装的版本如下:
(版本 71.0.3578.98)
升级本机的谷歌浏览器,然后重启即可解决(或者安装符合要求的浏览器版本)。
我们尝试重新运行 chrome-cookie-demo 项目,会发现可以正常打开本站,但是,网页处于未登录的状态。当点击浏览器打开本站的时候,状态为已登录状态。
解决办法为,设置 user-data-dir 参数,代码如下:
我们重新启动程序,会报错如下:
未经处理的异常: OpenQA.Selenium.WebDriverException: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
在 OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
在 OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
在 OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
在 OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options)
在 chrome_cookie_demo.Program.Main(String[] args) 位置 C:\Users\itsvse_pc\source\repos\chrome-cookie-demo\chrome-cookie-demo\Program.cs:行号 36
大体意思为,文件夹已经被占用,请更换,解决办法:关闭自己打开的谷歌浏览器,把用户数据文件夹给我们写的“chrome-cookie-demo”程序使用。
获取网页cookie
driver.manage().getCookies(); // Return The List of all Cookies
driver.manage().getCookieNamed(arg0); //Return specific cookie according to name
driver.manage().addCookie(arg0); //Create and add the cookie
driver.manage().deleteCookie(arg0); // Delete specific cookie
driver.manage().deleteCookieNamed(arg0); // Delete specific cookie according Name
driver.manage().deleteAllCookies(); // Delete all cookies
文档:超链接登录可见。
我们测试获取所有网页cookie
发现,可以读取到“HttpOnly”的cookie信息,如下图:
当然,我们需要将cookie信息转换成字符串,然后模拟请求提交接口,源码中附上转换成字符串的方法。
源码下载:
超链接登录可见。
(完)
|
评分
-
查看全部评分
上一篇:EF(CodeFirst) + MySQL下一篇:MSSQL 条件查询 WHERE 忽略条件
|