Follow along with the video below to see how to install our site as a web app on your home screen.
Not: This feature may not be available in some browsers.
Merhaba Dostum İndirilenler | ChromeDriver | Chrome for Developers Şuraya bakarmısınc# için chromium tarayıcısı bulmak istiyorum güncel sürümü bulamıyorum onu buldum chromiumdriver uygun sürüm bulmak ayrı bela
chrome eklenti eklenmiyor galiba artık co.AddExtension kulanılmıyor galibaMerhaba Dostum İndirilenler | ChromeDriver | Chrome for Developers Şuraya bakarmısın
Chromium ile C#’ta sorunsuz çalışmak için öncelikle tarayıcının tam sürümünü öğren (chrome://version veya chrome.exe --version), ardından chromedriverın aynı major sürümünü kullan. Major uyuşmazlığı en sık hataya yol açar; otomatik çözüm istiyorsan Selenium 4.6+ ile gelen SeleniumManager veya NuGet’teki WebDriverManager.Net gibi kütüphaneler chromedriver’ı tarayıcı sürümüne göre indirip ayarlayabilir; elle yapmak istersen tarayıcı sürümüne denk gelen chromedriver zip’ini indirdikten sonra chromedriver.exeyi PATH’e veya proje dizinine koy, C# tarafında ChromeOptions.BinaryLocation ile Chromium’un exe yolunu göster ve ChromeDriverService.CreateDefaultService ile chromedriver dizinini belirt; alternatif olarak sürekli derlemeler/continuous build’ler üzerinden Chromium indirilebilir ama üçüncü taraf kaynakların güvenliğini kontrol et; CI/CD ortamlarında driver yönetimini otomatikleştirmek için WebDriverManager veya SeleniumManager kullan, böylece uyumsuzluk ve manuel güncelleme derdinden kurtulursun.c# için chromium tarayıcısı bulmak istiyorum güncel sürümü bulamıyorum onu buldum chromiumdriver uygun sürüm bulmak ayrı bela
chatgpt co.AddExtension komudunun çalışmadığını engellendiğini söyledi denediğimde de çalışmadığını gördüm ama yanlış kodda olabilir ancak bunu yazdığını gördümChromium ile C#’ta sorunsuz çalışmak için öncelikle tarayıcının tam sürümünü öğren (chrome://version veya chrome.exe --version), ardından chromedriverın aynı major sürümünü kullan. Major uyuşmazlığı en sık hataya yol açar; otomatik çözüm istiyorsan Selenium 4.6+ ile gelen SeleniumManager veya NuGet’teki WebDriverManager.Net gibi kütüphaneler chromedriver’ı tarayıcı sürümüne göre indirip ayarlayabilir; elle yapmak istersen tarayıcı sürümüne denk gelen chromedriver zip’ini indirdikten sonra chromedriver.exeyi PATH’e veya proje dizinine koy, C# tarafında ChromeOptions.BinaryLocation ile Chromium’un exe yolunu göster ve ChromeDriverService.CreateDefaultService ile chromedriver dizinini belirt; alternatif olarak sürekli derlemeler/continuous build’ler üzerinden Chromium indirilebilir ama üçüncü taraf kaynakların güvenliğini kontrol et; CI/CD ortamlarında driver yönetimini otomatikleştirmek için WebDriverManager veya SeleniumManager kullan, böylece uyumsuzluk ve manuel güncelleme derdinden kurtulursun.
Sürüm seçimi | ChromeDriver | Chrome for Developers
developer.chrome.com
AddExtension komutunun çalışmamasının nedeni çoğunlukla Chromium’un belirli sürümlerinde veya bazı güvenlik politikalarında uzantıların doğrudan yüklenmesine izin verilmemesidir. Yani sorun senin kodundan kaynaklanabileceği gibi, tarayıcı veya sürüm kısıtlamasından da kaynaklanabilir.chatgpt co.AddExtension komudunun çalışmadığını engellendiğini söyledi denediğimde de çalışmadığını gördüm ama yanlış kodda olabilir ancak bunu yazdığını gördüm
Hem .crx dosyasından çıkarıp klasörü --load-extension ile veriyorsun hem de doğrudan klasör verince, chrome içinde görünmüyor. Kodunda ve iş akışında birkaç sık yapılan hata var.Snippet
public bool Tempeklentiyukle(ChromeOptions co)
{
string eklentiDosyasi = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Chrome.dat");
string eklentiKlasoru = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Eklenti");
string tempEklentiKlasoru = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Eklenti", "ChromeEklentiTemp");
string profilKlasoru = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ChromeProfil");
try
{
if (Directory.Exists(tempEklentiKlasoru))
Directory.Delete(tempEklentiKlasoru, true);
}
catch { /* ignore */ }
Directory.CreateDirectory(tempEklentiKlasoru);
Directory.CreateDirectory(profilKlasoru);
if (!File.Exists(eklentiDosyasi) || !Directory.Exists(eklentiKlasoru))
{
Renklendir("Eklenti klasörü veya Chrome.dat bulunamadı.", color: Color.Red);
return false;
}
var yuklenenUzunYollar = new List<string>();
foreach (var satirRaw in File.ReadLines(eklentiDosyasi))
{
string isim = satirRaw?.Trim();
if (string.IsNullOrEmpty(isim)) continue;
string kaynak = Path.Combine(eklentiKlasoru, isim);
try
{
// Klasör ise doğrudan kullan
if (Directory.Exists(kaynak))
{
string manifest = Path.Combine(kaynak, "manifest.json");
if (!File.Exists(manifest))
{
Renklendir($"manifest.json yok: {isim}", color: Color.Yellow);
continue;
}
yuklenenUzunYollar.Add(Path.GetFullPath(kaynak));
Renklendir($"Klasör eklenti hazır: {isim}", color: Color.Green);
continue;
}
// .crx ise çıkar
if (File.Exists(kaynak) && kaynak.EndsWith(".crx", StringComparison.OrdinalIgnoreCase))
{
string hedefKlasor = Path.Combine(tempEklentiKlasoru, Path.GetFileNameWithoutExtension(isim));
using (var fs = new FileStream(kaynak, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
int zipIndex = -1;
for (int i = 0; i < buffer.Length - 1; i++)
{
if (buffer == 0x50 && buffer[i + 1] == 0x4B)
{
zipIndex = i;
break;
}
}
if (zipIndex == -1)
{
Renklendir($"CRX içinden ZIP bulunamadı: {isim}", color: Color.Red);
continue;
}
Directory.CreateDirectory(hedefKlasor);
using (var zipStream = new MemoryStream(buffer, zipIndex, buffer.Length - zipIndex))
using (var zip = new System.IO.Compression.ZipArchive(zipStream))
zip.ExtractToDirectory(hedefKlasor, true);
}
if (!File.Exists(Path.Combine(hedefKlasor, "manifest.json")))
{
Renklendir($"CRX çıkarıldı ama manifest.json yok: {isim}", color: Color.Yellow);
continue;
}
yuklenenUzunYollar.Add(Path.GetFullPath(hedefKlasor));
Renklendir($"CRX çıkarıldı: {isim}", color: Color.Green);
continue;
}
Renklendir($"Eklenti bulunamadı: {isim}", color: Color.DarkBlue);
}
catch (Exception ex)
{
Renklendir($"İşleme hata: {isim} - {ex.Message}", color: Color.Red);
}
}
if (yuklenenUzunYollar.Count == 0)
{
Renklendir("Yüklenecek geçerli eklenti yok.", color: Color.Red);
return false;
}
// MV3 / uyumluluk kontrolü (loglamak için)
foreach (var p in yuklenenUzunYollar)
{
string mf = Path.Combine(p, "manifest.json");
try
{
var doc = JsonDocument.Parse(File.ReadAllText(mf));
if (doc.RootElement.TryGetProperty("manifest_version", out var mv))
{
Renklendir($"ℹ {Path.GetFileName(p)} manifest_version = {mv.GetInt32()}", color: Color.Cyan);
}
}
catch { /* ignore parse errors here */ }
}
// Chrome 142 ile güvenilir yükleme için proje içi user-data-dir kullan
string joined = string.Join(",", yuklenenUzunYollar.Select(p => p.Trim()));
// co ayarları
co.AddArgument("--enable-extensions");
co.AddArgument("--load-extension=" + joined);
co.AddArgument("--disable-extensions-except=" + joined);
// izinler / developer mode
co.AddArgument("--allow-file-access-from-files");
co.AddArgument("--allow-insecure-localhost");
co.AddArgument("--disable-component-update");
co.AddArgument("--no-first-run");
co.AddArgument("--no-default-browser-check");
co.AddArgument("--user-data-dir=" + profilKlasoru);
co.AddArgument("--remote-debugging-port=9222");
// Otomasyon flag'lerini bastır
co.AddExcludedArgument("enable-automation");
co.AddAdditionalOption("useAutomationExtension", false);
Renklendir($"Eklentiler eklendi (joined): {joined}", color: Color.Blue);
Renklendir($"Toplam eklenti sayısı: {yuklenenUzunYollar.Count}", color: Color.Green);
return true;
}
// Opsiyonel: driver ile chrome://extensions kontrolü yapar
// extensionNames -> manifest 'name' veya klasör isimlerinden oluşan dizi (basit eşleşme)
public bool VerifyExtensionsLoaded(string[] extensionNames, ChromeOptions co, int timeoutSeconds = 8)
{
// Bu metot doğrulama içindir; co zaten Tempeklentiyukle ile ayarlanmış olmalı.
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
service.SuppressInitialDiagnosticInformation = true;
try
{
using var driver = new ChromeDriver(service, co);
driver.Navigate().GoToUrl("chrome://extensions/");
var wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(timeoutSeconds));
System.Threading.Thread.Sleep(1200); // extension list yüklenene kadar kısa bekle
string page = driver.PageSource;
bool anyFound = false;
foreach (var name in extensionNames)
{
if (string.IsNullOrWhiteSpace(name)) continue;
if (page.IndexOf(name, StringComparison.OrdinalIgnoreCase) >= 0)
{
Renklendir($"Eklenti bulundu sayfada: {name}", color: Color.Green);
anyFound = true;
}
else
{
Renklendir($"Eklenti görünmedi: {name}", color: Color.Yellow);
}
}
driver.Quit();
return anyFound;
}
catch (Exception ex)
{
Renklendir("Doğrulama sırasında hata: " + ex.Message, color: Color.Red);
return false;
}
} crx de yüklesem load ilede yüklesem gözükmüyor
using (var fs = new FileStream(kaynak, FileMode.Open, FileAccess.Read))
{
byte[] buffer = new byte[fs.Length];
int read = fs.Read(buffer, 0, buffer.Length);
int zipIndex = -1;
for (int i = 0; i < read - 1; i++)
{
if (buffer[i] == 0x50 && buffer[i + 1] == 0x4B) // 'P' 'K'
{
zipIndex = i;
break;
}
}
if (zipIndex == -1)
{
Renklendir($"❌ CRX içinden ZIP bulunamadı: {isim}", color: Color.Red);
continue;
}
Directory.CreateDirectory(hedefKlasor);
using (var zipStream = new MemoryStream(buffer, zipIndex, read - zipIndex))
using (var zip = new System.IO.Compression.ZipArchive(zipStream, System.IO.Compression.ZipArchiveMode.Read))
{
zip.ExtractToDirectory(hedefKlasor, true);
}
}
var joined = string.Join(",", yuklenenUzunYollar.Select(p => "\"" + p + "\"")); // Eğer boşluk varsa tırnak koy
co.AddArgument("--load-extension=" + joined);
co.AddArgument("--disable-extensions-except=" + joined);
string profilKlasoru = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ChromeProfil_" + Guid.NewGuid().ToString());
driver.Navigate().GoToUrl("chrome://extensions/");
System.Threading.Thread.Sleep(1200);
var script = @"
const manager = document.querySelector('extensions-manager');
if(!manager) return '';
const root1 = manager.shadowRoot;
const items = root1.querySelectorAll('extensions-item');
let names = [];
items.forEach(it => {
const r = it.shadowRoot;
const nameEl = r.querySelector('#name .name');
if(nameEl) names.push(nameEl.innerText);
});
return names.join('||');
";
var result = (string) ((IJavaScriptExecutor)driver).ExecuteScript(script);
foreach(var name in (result ?? "").Split(new[] {"||"}, StringSplitOptions.RemoveEmptyEntries)) {
Renklendir($"🔎 Found extension in UI: {name}", color: Color.Green);
}