Merhaba arkadaşlar ben Kruvazör
Bugün sizlerle basit ama çok karıştırılan, cevapları göz önünde dahi olsa çözülemeyen bir problemi kısaca konuşacağız.
Öncelikle Selenium nedir? Ne değildir? Ne için kullanılır konularını konuşalım.
Selenium, web tarayıcılarında test otomasyonu yapmayı sağlayan bir yapıdır. Ana amacı, Uygulamaların belirli test senaryolarını otomatik olarak çalıştırmak ve sonuçları değerlendirmektir.
Bu, özellikle büyük ve karmaşık web uygulamalarında tekrar eden görevleri otomatikleştirmek ve hataları erken tespit etmek için kullanılır.
Selenium ne değildir?
Selenium İnstagram gibi sosyal medya platformlarda bot yapmak ya da web scrap yapmak için yapılan bir kütüphane değildir kısaca.
Bir hata yaptınız ve web scrap işlemlerinde selenium kullandınız diyelim, kullanıcının ekranında oluşacak browser ve console kirliliğini engellemek adına yapabileceğiz 1-2 şey bulunmakta.
haydi onlara bakalım.
Senaryo:
Muzaffer, sabahları tır şoförlüğü yapan, akşamları ise karanlık dünyanın içinde adını duyuran bir hacker olarak yaşamını sürdürüyordu. Ancak hayatındaki bu iki ayrı dünya arasında bir denge kurmak her geçen gün zorlaşıyordu. Sabahları tır şoförlüğü yaptığı şirketteki işine devam edebilmek için şirketin websitesinden günlük görevleri hakkında bilgi alması gerekiyordu. Ancak şirketin güvenlik politikası, sadece ofiste bulunan bilgisayarlara erişim izni veriyordu.
Muzaffer, çekingen ve asosyal bir karakter olarak, ofise gidip insanlarla iletişime geçmeye çekiniyordu. Ancak aynı zamanda kendi güvenliğini riske atmak istemeyen bir tır şoförü olarak, hacker becerilerini kullanmak yerine yasal bir çözüm bulma yolunu seçti.
Bir gün, uzun araştırmalar ve düşünce sürecinden sonra Muzaffer, C# dilini kullanarak Selenium ile şirketin websitesine otomatik giriş yapacak ve gerekli verileri çekecek bir uygulama yapmaya karar verdi.
Muzaffer, planını uygulamak için karanlık tırında bilgisayarının başına geçti. İlk olarak, web sitesine giriş yapmak için gerekenleri araştırdı. Şanslıydı ki meslek lisesinde HTML öğrenmişti.
Ardından, Selenium'u kullanarak tarayıcı üzerinden otomatik giriş yapma ve veri çekme işlemlerini gerçekleştirecek bir C# uygulaması yazmaya başladı.
Uygulama, her sabah belirli bir saatte şirketin websitesine otomatik olarak giriş yapıyor, Muzaffer'in öğrenmesi gereken bilgileri çekiyor ve bu verileri Telegram botu aracılığıyla kendi hesabına iletiyordu. Böylece Muzaffer, tırından inmeden, ofise gitmeden günlük görevleri hakkında bilgi sahibi olabiliyordu.
Ancak muzafferin dikkat etmesi gereken bir şey vardı;
Bilgisayarlar aktif olarak kullanıldığı için web browseri ve console'u gizlemesi gerekiyordu. yoksa birileri durumu anlayabilirdi.
Haydi şimdi muzafferin kodlarını inceleyelim. ve Seleniumu nasıl gizlediğini öğrenelim.
Console projesi açalım ve bu kütüphaneleri ekleyelim
C#:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Telegram.Bot;
Global alan
C#:
//GetConsoleWindow fonksiyonu
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
//ShowWindow fonksiyonu.
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
Main içerisine girelim
C#:
var handle = GetConsoleWindow(); //console gizleme
ShowWindow(handle, SW_HIDE);
string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
string chromeDriverPath = Path.Combine(currentDirectory, "chromedriver.exe");
if (!File.Exists(chromeDriverPath))
{
Console.WriteLine("HATA: Chromedriver.exe proje klasöründe yok.");
return;
}
C#:
ChromeOptions chromeOptions = new ChromeOptions(); //işte burası kritik
chromeOptions.AddArgument("--headless"); // burada bu --headlessi chrome option olarak belirtiyoruz ki program çalıştığında karşımıza chrome çıkmasın
C#:
using (IWebDriver driver = new ChromeDriver(chromeDriverPath, chromeOptions)) //BURADA CHROMEOPTİONS OLARAK BELİRTMEYİ UNUTUYORLAR GENELDE KESİNLİKLE BELİRTİN.
{
driver.Navigate().GoToUrl("https://www.tasimasuyladegirmendonmez.com/tirci/login"); //siteyi veriyoruz
IWebElement customerNumberInput = driver.FindElement(By.Id("sofor_Number")); //sitede çekeceğimiz form elementleri
IWebElement passwordInput = driver.FindElement(By.Id("sofor_Password"));
IWebElement submitButton = driver.FindElement(By.Id("submitButton"));
customerNumberInput.SendKeys("muzaffer"); //kullanıcı adı
passwordInput.SendKeys("bos_zamanlarimda_coderx37ye_ne_oldu_diye_düsünüyorum37"); //sifre
submitButton.Click(); //butona tıklama
// BURADAN SONRASI MUZAFFERİN KİŞİSEL BİLGİLERİ OLDUĞU İÇİN GİZLENMİŞTİR.
// Muzaffer buradan aldığı verileri message adında bir değişkende tutup telegrama atacaktır
Telegram fonksiyonu (mainde çağırmayı unutmayın)
C#:
static void SendToTelegram(string message)
{
string botToken = "";
long chatId = ;
TelegramBotClient botClient = new TelegramBotClient(botToken);
botClient.SendTextMessageAsync(chatId, message).Wait();
}
Muzaffer bu kodlar ile hem chrome u hem de console u gizlemeyi başardı ve verileri başarıyla her gün telegramına yolladı.
alt barda çıkan console görüntüsünü nasıl gizleyeceğinizi yorumlarda belirtebilirsiniz
OKUDUĞUNUZ İÇİN TEŞEKKÜRLER.