1-) C# - CefSharp chrome gibidir embedded winform webbrowser
nugetten indir : CefSharp.WinForms
using CefSharp; using CefSharp.WinForms; using System; using System.Windows.Forms;
namespace ProtobufWeb { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
ChromiumWebBrowser browser; private void Form1_Load(object sender, EventArgs e) { Cef.Initialize(new CefSettings()); browser = new ChromiumWebBrowser("https://protobuf-decoder.netlify.app/"); panel1.Controls.Add(browser); browser.Dock = DockStyle.Fill;
browser.LoadingStateChanged += OnLoadingStateChanged; }
private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { if (!args.IsLoading && basladim == false){
}
}
private void button1_Click(object sender, EventArgs e) { // usernama e değer yazmak için kullan // browser.ExecuteScriptAsync("document.getElementById('userName').value= 'admin'");
// id ile click olayı //string script = string.Format("document.getElementById('loginBtn').click();"); //browser.EvaluateScriptAsync(script).ContinueWith(x => //{ // var response = x.Result;
// if (response.Success && response.Result != null) // { // var startDate = response.Result; // //startDate is the value of a HTML element. // } //});
// AŞAĞIDAKİ KOD BUTTONA CLİCK OLAYI YAPAR string script = string.Format("document.getElementsByClassName('ui fluid primary button')[0].click();"); browser.EvaluateScriptAsync(script).ContinueWith(x => { var response = x.Result;
if (response.Success && response.Result != null) { var startDate = response.Result; //startDate is the value of a HTML element. } });
// AŞAĞIDAKİ KOD HTML TEXTİNİ ALMAK İÇİN KULLANILIR string script2 = string.Format(@"document.getElementsByTagName ('html')[0].innerHTML"); browser.EvaluateScriptAsync(script2).ContinueWith(x => { var response = x.Result; if (response.Success && response.Result != null) { this.Invoke(new MethodInvoker(() => { textBox2.Text = response.Result.ToString(); })); } }); } } }
|
2- JAVASCRİPT MESAJLARINI KAPATMAK İÇİN
private void Form1_Load(object sender, EventArgs e) { var cefSettings = new CefSettings(); cefSettings.CefCommandLineArgs.Add("disable-javascript-harmony-shipping", "1");
Cef.Initialize(cefSettings); browser = new ChromiumWebBrowser("https://kbscalisan.egm.gov.tr/Proje/homepage.aspx");
var browserSettings = new BrowserSettings { Javascript = CefState.Enabled, JavascriptCloseWindows = CefState.Disabled, JavascriptAccessClipboard = CefState.Disabled, LocalStorage = CefState.Enabled, Databases = CefState.Enabled, };
browser.BrowserSettings = browserSettings;
panel1.Controls.Add(browser); browser.Dock = DockStyle.Fill;
browser.LoadingStateChanged += OnLoadingStateChanged;
} |
3- TÜM COOKİLERİ ALMAK İÇİN DİĞER
1- CookieVisitor.cs
using CefSharp; using System; using System.Collections.Generic; using System.Linq;
namespace Deneme3 { public class CookieVisitor : ICookieVisitor { public List<Cookie> Cookies = new List<Cookie>(); public void Dispose() { //Cookies.Clear(); } public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie) { Console.WriteLine(cookie.Name + " = " + cookie.Value);
var varmi = Cookies.Where(x=>x.Name == cookie.Name).FirstOrDefault(); if (varmi==null) { Cookies.Add(cookie); } else { varmi.Value = cookie.Value; } return true; } } } |
2- kullanımı
browser.FrameLoadEnd += Browser_FrameLoadEnd; Api2 apiNew = new Api2(); CookieVisitor visitor = new CookieVisitor();
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { if (e.Frame.IsMain) {
getAllCookies(); // ayrıca bir işlem yapmadan önce kesin çalıştır } }
public void getAllCookies() { var cookieManager = Cef.GetGlobalCookieManager(); var cookies = cookieManager.VisitAllCookies(visitor);
if (visitor.Cookies == null || visitor.Cookies.Count == 0) { return; } foreach (var cookie in visitor.Cookies) { Debug.WriteLine("CookieName: " + cookie.Name + " CookieValue:" + cookie.Value);
System.Net.Cookie cookie1 = new System.Net.Cookie(); cookie1.Name = cookie.Name; cookie1.Domain = cookie.Domain; cookie1.Value = cookie.Value; apiNew.cookies.Add(cookie1); } var sonuc = apiNew.requestGet(txtUrl.Text); }
|
4- TÜM COOKİLERİ ALMAK İÇİN DİĞER
KAYNAK : https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/Handlers/BrowserProcessHandler.cs
browser.FrameLoadEnd += Browser_FrameLoadEnd;
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { if (e.Frame.IsMain) { getAllCookies(); } }
Api2 apiNew = new Api2();
public void getAllCookies() { var cookieManager = Cef.GetGlobalCookieManager();
cookieManager.VisitAllCookiesAsync().ContinueWith(t => { if (t.Status == TaskStatus.RanToCompletion) { var cookies = t.Result;
foreach (var cookie in cookies) { Debug.WriteLine("CookieName: " + cookie.Name+" CookieValue:"+cookie.Value); System.Net.Cookie cookie1 = new System.Net.Cookie(); cookie1.Name = cookie.Name; cookie1.Domain = cookie.Domain; cookie1.Value = cookie.Value; apiNew.cookies.Add(cookie1); } } else { Debug.WriteLine("No Cookies found"); } }); }
|
5- CLİCK OLAYLARI
private async Task ClickButtonByNameAsync(string name) { // Sayfa DOM ağacını al var frame = browser.GetMainFrame(); var taskCompletionSource = new TaskCompletionSource<bool>();
// JavaScript kodunu oluştur string jsCode = string.Format("document.getElementsByName('{0}')[0].click();", name);
// JavaScript kodunu Chromium'da çalıştır await frame.EvaluateScriptAsync(jsCode).ContinueWith(x => { // İşlem tamamlandığında tıklamanın yapıldığından emin ol if (!x.IsFaulted) { taskCompletionSource.TrySetResult(true); } else { taskCompletionSource.TrySetException(x.Exception); } }).ConfigureAwait(false);
// İşlem tamamlanana kadar bekle await taskCompletionSource.Task; }
kullanımı
ClickButtonByNameAsync("btnSorgula");//attirube olarak name'si btnSorgula olana click atar
diğer : //attirube olarak type'ı image ve alt'ı Sil olana click atar
browser.ExecuteScriptAsync("document.querySelector('input[type=image][alt=Sil]').click();");
|
6- DEĞER YAZMA
private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { if (!args.IsLoading && ilk) { browser.ExecuteScriptAsync("document.getElementById('txtkullaniciadi').value= '" + username + "'"); browser.ExecuteScriptAsync("document.getElementById('txtsifre').value= '" + sifre + "'"); ilk = false; } } |
7- Listeyi teker teker dolanma çok önemli
using CefSharp; using CefSharp.WinForms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net.Http; using System.Runtime.ConstrainedExecution; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace OtoBot { public partial class Form1 : Form { private ChromiumWebBrowser browser; private string[] urls; private int currentIndex = 0;
public Form1() { InitializeComponent(); }
private void btnBaslat_Click(object sender, EventArgs e) { baslat(); }
public void baslat() { \\ urls 'in içinde textbox a alt alta girilen urller var urls = textBox1.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); currentIndex = 0; basladim = true; LoadNextUrl(); } private async void LoadNextUrl() { if (currentIndex < urls.Length) { string url = urls[currentIndex]; Console.WriteLine(url);
await Task.Run(() => { browser.Load(url); });
currentIndex++; } }
public bool basladim = false; private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { if (!args.IsLoading && basladim) { LoadNextUrl(); } }
private void timer1_Tick(object sender, EventArgs e) { baslat(); } private void Form1_Load(object sender, EventArgs e) { Cef.Initialize(new CefSettings()); browser = new ChromiumWebBrowser("https://roketnot.com/"); panel1.Controls.Add(browser); browser.Dock = DockStyle.Fill; browser.LoadingStateChanged += OnLoadingStateChanged; }
} } |