Bir bilgisayar mühendisi için programlama dili, öğrendiklerini sınadığı, deneyler yaptığı bir laboratuardır ve mühendisler deneylerini, kestiremedikleri sonuçları gözlemlemek için değil, öngördükleri sonuçları doğrulamak için yapar...

Ders Programı Giriş Yardımcısı

Proliz'in öğrenci otomasyonunda insanı kanser etme potansiyeli olan ders programı girişini kolaylaştırmak için bir eklenti.
Ders Programı Girişi Yardımcısı ekran görüntüsü

Proliz'in öğrenci otomasyonunun bazen çok can sıkıcı olabilen oldukça hantal bir yapısı var. Örneğin ders programı girişinde sadece bir dersin saatini ve yerini belirlemek için normalde sunucuya birkaç sayı göndermek yeterli olacakken, ASPnin her yerde kullanılmaması gereken bir özelliği yüzünden tüm sayfa içeriği tekrar tekrar sunucuya gidip oradan geri geliyor. Neredeyse her tıklamada "yükleniyor" yazısıyla karşılaşıp gereksiz veri trafiğinin bitmesini bekliyorsunuz...

Eklenti yardımıyla klavyeden giriş yapmanıza gerek kalmadan herşeyi fare yardımıyla halledebilirsiniz. Ders programı giriş ekranındayken simgeye tıkladığınızda eklenti, dersleri ve sınıfları otomasyondan çeker, örgüne göre ders saatlerini, ders aralarını kendi hesaplar ve sisteme kendi girer. Size sadece seçeneklerden hızlıca seçim yapmak kalır. Formdan forma atlamadan, sade bir arayüz üzerinden ders programının tamamını girebilirsiniz.

Eklentiyi kullanmak için aşağıdaki dosyaları oluşturup Chrome'a chrome://extensions arayüzünden yüklemeniz yeterli.

Dosyalar

dpgy.js:

/*
 *****   Ders Programı Giriş Yardımcısı   *****
 * Öğrenci otomasyonuna ders programı girişini
 * biraz olsun kolaylaştırmak için...
 * 20/01/2019
 * http://huseyinatasoy.com
 **********************************************
 */

function uyari(m)
{
  var e=document.getElementById('bilgi');
  e.innerHTML=m;
  e.style.color='red';
}
function bilgi(m)
{
  var e=document.getElementById('bilgi');
  e.innerHTML=m;
  e.style.color='green';
}

function lazimsaSifir(s)
{
  return (s<10?'0':'')+s;
}

function aralikliSaatler(sDkBas,sDkSon,dersSuresiDk,araDk)
{
  if(sDkSon[0]>23) sDkSon[0]=23;
  var secenekler='';
  
  var araMs=araDk*60*1000;
  var dersSuresiMs=dersSuresiDk*60*1000;

  var t=new Date();
  t.setHours(sDkBas[0]);
  t.setMinutes(sDkBas[1]);
  
  var sDkToplamDk=sDkSon[0]*60+sDkSon[1];
  
  while(t.getHours()*60+t.getMinutes()<sDkToplamDk)
  {
    secenekler+='<option>';
    secenekler+=lazimsaSifir(t.getHours())+':'+lazimsaSifir(t.getMinutes())+'-';
    t=new Date(t.getTime()+dersSuresiMs);
    secenekler+=lazimsaSifir(t.getHours())+':'+lazimsaSifir(t.getMinutes());   
    secenekler+='</option>';
    t=new Date(t.getTime()+araMs);
  }
  return secenekler;
}

var viewStateZimbirtisi,viewStateG;
function gonder(e)
{
  var s=e.value;
  var s1=s.substr(6,5);
  var s2=s.substr(12,5);
  
  u=url.replace('start.aspx','ders_programi_kayit.aspx');
  ref=url;

  s=`fetch("`+u+`", 
      {
        "credentials":"include",
        "headers":
        {
          "accept":"*/*",
          "accept-language":"tr,en;q=0.9",
          "cache-control":"no-cache",
          "content-type":"application/x-www-form-urlencoded; charset=UTF-8",
          "x-microsoftajax":"Delta=true",
          "x-requested-with":"XMLHttpRequest"
        },
        "referrer":"`+ref+`",
        "referrerPolicy":"no-referrer-when-downgrade",
        "body":"ScriptManager1=UpdatePanel1%7CbtnKaydet&cmbFakulte=-1`
              +`&cmbDerslik=`+document.getElementById('siniflar').value
              +`&cmb_gunler=`+document.getElementsByTagName('select')[1].selectedIndex
              +`&txtBasSaat=`+encodeURIComponent(s1)
              +`&txtBitSaat=`+encodeURIComponent(s2)
              +`&__VIEWSTATE=`+encodeURIComponent(viewStateZimbirtisi)
              +`&__VIEWSTATEGENERATOR=`+encodeURIComponent(viewStateG)
              +`&txtAciklama=&__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__SCROLLPOSITIONX=0&__SCROLLPOSITIONY=0&__ASYNCPOST=true&btnKaydet=Kaydet",
        "method":"POST",
        "mode":"cors"
      }).then(function()
      {
        document.getElementById("bailwal_overlay_frame").contentWindow
          .document.getElementById("grd_ders_hareket")
          .getElementsByTagName("tr")[`+(document.getElementById("dersler").selectedIndex)+`]
          .getElementsByTagName("td")[0].click();
      });`;

  chrome.tabs.executeScript(sekmeId,{code:s});
}

function hazirla()
{
  var e=document.getElementById('ilkS');
  var i=e.selectedIndex;
  var j=document.getElementById('sonS').selectedIndex;
  var icerik='';
  var s=e.getElementsByTagName('option');
  for(var k=i;k<=j;k++)
    icerik+='<input type="button" value="Ekle: '+s[k].value+'">';
  if(icerik=='') icerik='-';
  document.getElementById('butonlar').innerHTML=icerik;
  
  var e=document.getElementsByTagName('input');
  for(i=0;i<e.length;i++)
    e[i].addEventListener('click',function(){ this.style.color='#ddd';this.style.backgroundColor='#191';gonder(this); });
}

function hazirsaYenile()
{
  var hazirMiydi=(document.getElementById('butonlar').innerHTML.trim()!='');
  if(hazirMiydi) hazirla();
  return hazirMiydi;
}

var url;
function dersleriCek()
{
  var js=`
    var dersSayisi=0,
        satirlar=null,
        ogretim=1;
    try
    {
      var ifD=document.getElementById('bailwal_overlay_frame').contentWindow.document;
      satirlar=ifD.getElementById('grd_ders_hareket').getElementsByTagName('tr');
      dersSayisi=satirlar.length-3;
      if(ifD.getElementById('select2-cmb_prog-container').innerText.indexOf('İÖ')>0)
        ogretim=2;
    }catch(e){}

    var dersler='';
    for(var i=1;i<=dersSayisi;i++)
      dersler+='<option>'+satirlar[i].getElementsByTagName('td')[2].innerText.trim()+'</option>';

    Array(dersSayisi,dersler,ogretim);
  `;

  chrome.tabs.executeScript(sekmeId,{code:js},function(snc)
  {
    snc=snc[0];
    var dersS=parseInt(snc[0]);
    if(dersS>0)
    {
      bilgi('Dersi seçin.');
      var saatler='<option>Seçiniz...</option>',
          ogretim=parseInt(snc[2]);

      if(ogretim==1)
        saatler+=aralikliSaatler([8,30],[12,0],45,10)+aralikliSaatler([13,30],[17,0],45,10);
      else
        saatler+= aralikliSaatler([17,0],[23,0],45,5);
      
      document.getElementById('frm').innerHTML='<h2>Ders Listesi:</h2> <select id="dersler"><option>Seçiniz...</option>'+snc[1]+'</select>'
        +'<h2>Gün:</h2> <select><option>Pazartesi</option><option>Salı</option><option>Çarşamba</option><option>Perşembe</option><option>Cuma</option><option>Cumartesi</option></select>'
        +'<table><tr><td><h2>İlk dersin saati:</h2></td><td><h2>Son dersin saati:</h2></td></tr>'
        +'<tr><td><select id="ilkS"></select></td><td><select id="sonS"></select></td></tr></table>';

      var ilkS=document.getElementById('ilkS');
      var sonS=document.getElementById('sonS');

      document.getElementById('dersler').addEventListener('change',function()
      {
        document.getElementById('butonlar').innerHTML='';
        if(this.selectedIndex<1) return;
        chrome.tabs.executeScript(sekmeId,{ 
          code:"document.getElementById('bailwal_overlay_frame').contentWindow.document.getElementById('grd_ders_hareket').getElementsByTagName('tr')["+(this.selectedIndex)+"].getElementsByTagName('td')[0].click()" 
        });
        ilkS.innerHTML=saatler;
        sonS.innerHTML=saatler;
        bilgi('Günü ve ilk ders saatini seçin');
      });
      
      var s=document.getElementsByTagName('select');
      
      ilkS.addEventListener('change',function()
      {
        if(!hazirsaYenile())
        {
          chrome.tabs.executeScript(sekmeId,{
            code:"document.getElementById('bailwal_overlay_frame').contentWindow.document.getElementById('btnEkle').click()"
          });
          bilgi('Ekleme formunun tamamen yüklenmesini bekleyin, ardından son ders saatini seçin.');
        }
      });
      
      sonS.addEventListener('change',function()
      { 
        var js=`
          var url,
              viewStateG='',
              viewStateZimbirtisi='',
              siniflar=-1;
          try
          {
            var icCerceve=document.getElementById('bailwal_overlay_frame').contentWindow;
            var icCerceve2=icCerceve.document.getElementById('bailwal_overlay_frame').contentWindow;
            siniflar=icCerceve2.document.getElementById('cmbDerslik').innerHTML;
            url=icCerceve2.document.URL;
            viewStateZimbirtisi=icCerceve2.document.getElementById('__VIEWSTATE').value;
            viewStateG=icCerceve2.document.getElementById('__VIEWSTATEGENERATOR').value;
            icCerceve.document.getElementById('bailwal_span_overlay_window_question').nextSibling.nextSibling.click();
          }catch(e){} Array(siniflar,viewStateG,viewStateZimbirtisi,url);
        `;

        chrome.tabs.executeScript(sekmeId,{code:js},function(snc)
        {
          snc=snc[0];
          if(parseInt(snc[0])!=-1)
          {
            document.getElementById('sinif').innerHTML='<h2>Sınıf:</h2> <select id="siniflar"><option>Seçiniz...</option>'+snc[0]+'</select>';
          }
          
          if(snc[1]!='')
          {
            viewStateG=snc[1];
            viewStateZimbirtisi=snc[2];
            url=snc[3];
          }
        });
        if(!hazirsaYenile())
          bilgi('Dersin yapılacağı sınıfı seçin.');
      });
      
      document.getElementById('sinif').addEventListener('change',function()
      {
        hazirla();
        bilgi('Şimdi her bir butona tıkladıktan sonra eklenen saatin sayfada belirmesini bekleyin.');
      });
    }
    else
    {
      uyari('Giriş yaptıktan sonra ders giriş formunu açmanız gerekiyor.');
    }
  });
}

var sekmeId=1;
document.addEventListener('DOMContentLoaded',function()
{  
  chrome.tabs.query({active:true,currentWindow:true},function(sekmeler)
  {
    sekmeId=sekmeler[0].id;
    var url=sekmeler[0].url;

    if(!url.startsWith('https://obs.iste.edu.tr/'))
    {
      var d=document.getElementById('frm');
      d.style.color='red';
      d.innerHTML='Otomasyonda değilsiniz. Yönlendirilmek için <a target="_blank" href="https://obs.iste.edu.tr/">tıklayınız</a>.';
      return;
    }
    bilgi('Hazırlanıyor...');
    dersleriCek();
  });
});

dpgy.html:

<!doctype html>
<html>
<head>
<title>Ders Programı Girişi</title>
<style type="text/css">
  body { margin:10px;padding:10px;padding-top:0;min-width:250px; }
  h1 { font-size:15px;text-align:center; }
  h2 { font-size:13px;margin:10px 0 4px 0; }
  hr { background-color:#777;border:none;height:1px;margin:10px -10px; }
  #frm { min-width:300px; }
  table { width:100%; }
  table td { padding:0;margin:0; }
  .dosya { background:#fff;color:#555;border:1px #ccc solid;padding: 6px;box-sizing: border-box;display:block; }
  #dosyalar { min-height:100px; }
  #siteye,#bilgi { text-align:center;margin-top:10px; }
  #bilgi { font-size:14px; }
  a { color:blue;text-decoration:none; }
  #siteye a { color:#999; }
  select { padding:5px;width:100%;border-radius:5px;outline:none; }
  option { padding:5px; }
  img { height:2em;vertical-align:middle;padding:0 10px; }
  #butonlar { text-align:center; }
  input[type=button] { margin:10px 5px;margin-bottom:0;padding:5px;border-radius:5px;background:#ddd;border:1px #aaa solid; }
</style>
<script src="dpgy.js"></script>
</head>
<body>
  <h1><img src="dpgy_simge.png">Ders Programı Girişi<img src="dpgy_simge.png"></h1><hr>
  <div id="frm"></div>
  <div id="sinif"></div>
  <div id="butonlar"></div>
  <div id="bilgi"></div>
  <div id="siteye"><a href="http://huseyinatasoy.com" target="_blank">huseyinatasoy.com</a></div>
</body>
</html>

manifest.json:

{
  "manifest_version": 2,

  "name": "Ders Programı Giriş Yardımcısı",
  "description": "Prolizin insanı kanser etme potansiyeline sahip ders programı ekleme arayüzü için bir yardımcı eklenti.",
  "version": "1.0",

  "browser_action": {
    "default_icon": "dpgy_simge.png",
    "default_popup": "dpgy.html"
  },
  "permissions": [
    "activeTab"
  ]
}

Ve son olarak dpgy_simge.png:
Ders Programı Girişi Yardıcısı için simge

Sayfayı
Posted: 20 Ocak 2019 Pazar, 22:17
Keywords: proliz, ders programı girişi, öğrenci otomasyonu

Leave Comment

 
You are replying to comment #-1. Click here if you want to cancel replying.

 

Comments

No approved comment.
 
 
Sayfa 36 sorgu ile 0.062 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2019 Hüseyin Atasoy