0023. 解決不同瀏覽器使用同一個Session的問題,Chrome瀏覽器為例 (Chrome下提供兩種解法)

 

應用所需

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