Search code examples
c#visual-studiogoogle-chromeselenium-webdriveraccount

Switch between my google accounts using selenium from c#


I get the following error, the accounts are opened, but the url is not navigated and the transactions do not take place. My goal is to open the accounts in order to go to the url and perform transactions. await VideoYukle(driver, token); function, can you give information about how I should edit this code? It would be great if you can provide sample code

        // YouTube Studio URL'si
    private string youtubeStudioUrl = "https://studio.youtube.com";

    // Profil dizinlerini bulur ve her biri için OpenUrlInChromeProfile çağırır
    public async Task OpenYouTubeStudiosAsync(CancellationToken token)
    {
        string userDataPath = @"C:\Users\fehmi\AppData\Local\Google\Chrome\User Data"; // Kullanıcı verileri dizini
        string[] profileDirectories = Directory.GetDirectories(userDataPath, "Profile *"); // Tüm profilleri bul

        foreach (string profileDir in profileDirectories)
        {
            if (token.IsCancellationRequested)
                break; // Eğer iptal edilmişse döngüyü kır

            try
            {
                string profileName = new DirectoryInfo(profileDir).Name; // Profil adını al
                Console.WriteLine($"Profil işleniyor: {profileName}");

                // Her profil için YouTube Studio'yu aç
                await OpenUrlInChromeProfile(profileName, token);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Profil için hata oluştu: {ex.Message}");
            }
        }
    }
    private string[] profileName;

    private async Task OpenUrlInChromeProfile(string profileName, CancellationToken token)
    {
        // ChromeOptions ayarlama
        ChromeOptions options = new ChromeOptions();
        options.AddArgument($"--user-data-dir={@"C:\Users\fehmi\AppData\Local\Google\Chrome\User Data"}");
        options.AddArgument($"--profile-directory={profileName}");
        options.AddArgument("--remote-debugging-port=9222"); // Remote debugging portunu ekleyin

        // ChromeDriver ile Chrome'u başlat
        using (IWebDriver driver = new ChromeDriver(options))
        {
            try
            {
                // Tarayıcının tamamen açılmasını bekleyin
                await Task.Delay(2000); // 2 saniye bekleme

                // YouTube Studio'ya git
                driver.Navigate().GoToUrl(youtubeStudioUrl);
                MessageBox.Show($"Navigating to {youtubeStudioUrl} for profile {profileName}", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);

                // Sayfanın yüklenmesini bekleyin
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
                wait.Until(d => d.Url.Contains("studio.youtube.com"));

                MessageBox.Show($"Profil {profileName} için sayfa yüklendi.", "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);

                // Video yükleme işlemi
                await VideoYukle(driver, token);
            }
            catch (WebDriverException ex)
            {
                MessageBox.Show($"WebDriver hatası: {ex.Message}", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Genel hata: {ex.Message}", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

Solution

  • I solved the problem Google Chrome should not be open.