應用所需 |
1. Chrome 瀏覽器 (範例一用到) 2. Visual Studio C# + Selenium Driver(範例二用到) |
目的: |
1. 操作Chrome 瀏覽器時,會遇到需要多開網頁的情況下,但此時每個多開的Chrome頁面,所使用的Session需要各自獨立不影響 |
GitHub: | https://github.com/gotoa1234/SeleniumCreateMultiSessionPage.git |
Demo 影片 : | https://www.youtube.com/watch?v=-eyxEPP2HEw&feature=youtu.be |
本篇分為二部分 : |
|
一、 | 1. 不用代碼的方式建立多個獨立的Chrome頁面 (使其Session彼此間不共用) |
二、 |
2. 使用Selenium C# 進行多個獨立的Chrome頁面 (Session彼此間不共用) |
1. 不用代碼的方式建立多個獨立的Chrome頁面 (使其Session彼此間不共用)
Step 1: 我們左邊的Chrome 已經登入了,此時再開啟一個新的Chrome,亦會吃到相同的Session (已登入狀態)
※ 可以開啟無痕模式,但是開了無痕後,之後的無痕都是吃相同的Session,本範例只要有硬碟空間+記憶體,開破百個不是問題
Step 2: 請對下方的工具列 -> 滑鼠右鍵 -> 啟動工作管理員
Step 3: 進入處理程序 -> 隨便找一個Chrome.exe 的檔案 (只要當前有開啟Chrome 就有此.exe 運行) -> 滑鼠右鍵 -> 開啟檔案位置
Step 4: 到了檔案位置後,請於上方的橫條列輸入 "cmd" -> 按下Enter
Step 5: 輸入 chrome.exe --user-data-dir="C:/Chrome_dev_session"
產生新的Chrome檔案目錄
※之後要多開就建立不同的名稱 EX :
chrome.exe --user-data-dir="C:/Chrome_dev_session2"
chrome.exe --user-data-dir="C:/Chrome_dev_session3"
chrome.exe --user-data-dir="C:/Chrome_dev_session4"
Step 6: 此時就可以看到新的Chrome 不帶有Session 的新頁籤 (因為是獨立的檔案,所以不會共用到舊有的Session)
2. 使用Selenium C# 進行多個獨立的Chrome頁面 (Session彼此間不共用)
Step1 : 先建立一個新的Visual 專案 ,並且安裝Selenium Chrome 版本,可以參考先前的範例
https://dotblogs.com.tw/milkgreenteaprograme_c_sharp/2018/08/05/185506
Step2 : 下面範例開啟兩個Task ,每個Selenium 執行時都是獨立的Session ,下面是執行兩次
關鍵在於
IWebDriver driver = new ChromeDriver();
叫用時必定是獨立的Session 頁面
textBoxMSG.Text = ("建立一個登入頁面" + "\r\n");
for (int i = 1; i <= 2; i++)
{
Task<string> taskCreateChrome = new Task<string>(() =>
CreateChrome()
);
taskCreateChrome.Start();//開始
taskCreateChrome.Wait();//等待
textBoxMSG.Text += ($@"執行次數:{i} 建立一個登入頁面 {taskCreateChrome.Result}" + "\r\n");//取值
}
Step3 : 範例中,會去建立兩次 Chrome Selenium ,並且各自登入 (第二次開啟時已確定不吃到前一個的Session)
public string CreateChrome()
{
IWebDriver driver = new ChromeDriver();
//開啟網頁
string url = "https://accounts.google.com/signin/v2/identifier?hl=zh-TW&passive=true&continue=https%3A%2F%2Fwww.google.com.tw%2F&flowName=GlifWebSignIn&flowEntry=ServiceLogin";
driver.Navigate().GoToUrl(url);
//隱式等待
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10000);
Thread.Sleep(2000);
//輸入帳號
driver.FindElement(By.Name("identifier")).SendKeys("XXXXXXXXX");
Thread.Sleep(2000);
//繼續下一步
driver.FindElement(By.Id("identifierNext")).Click();
Thread.Sleep(2000);
//輸入密碼
driver.FindElement(By.Name("password")).SendKeys("XXXXXXXXX");
Thread.Sleep(2000);
//繼續下一步
driver.FindElement(By.Id("passwordNext")).Click();
Thread.Sleep(2000);
return "登入Google帳戶-結束";
}
Step 4: 程式運行的Demo影片可以參考以下連結 :
https://www.youtube.com/watch?v=-eyxEPP2HEw&feature=youtu.be