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 (4)

gökhan
Reply
17 Ekim 2019 Perşembe, 10:56
#1

Proliz gibi sistemleri anlamanızı beklemiyoruz zaten,
anlasaydınız (kanser v.b.) bu yorumları yapmadınız zaten,
Çok biliyorsanız siz kanser etmeyen bir uygulama yazın ve dağıtın,

Yazdığınız uygulamalarda kullanıcılardan kullanıcı adı ve şifre alıyorsunuz,
bu KVKK ve diğer yasalar gereği ciddi bir suçtur.

Hüseyin Atasoy
Reply
17 Ekim 2019 Perşembe, 12:18
#2

Merhaba Gökhan bey, otomasyonun pek çok kısmının aktif kullanıcısıyım ve ben de bir yazılımcıyım. Amacım kötülemek değil, bazı kısımların kötü kurgulandığını düşünüyorum sadece. Yoksa arkasında büyük emek var, bundan şüphem yok.
Kullanıcıdan kullanıcı adı ve şifre girişi istediğim programı (Yoklama Yardımcısı isimli programı kastettiniz sanırım) kendi kişisel kullanımım için yazdım ve onu dağıtmıyorum. Ama amacım, yukarıda da dediğim gibi sistemi kötülemek değil, işleri kolaylaştırmak.
Bence kullanıcılardan, özellikle akademik taraftan geri dönüş alabileceğiniz bir mekanizma kurarsanız, hizmeti alan taraf olarak biz kullanıcılar için harika olur. Çünkü bazı şeyler gerçekten daha hızlı halledilebilir ve zaman bizim için çok değerli...

gökhan
Reply
17 Ekim 2019 Perşembe, 11:07
#3

insanları resmi kurumlardaki kimliğinizi kullanarak aldatıyorsunuz,
resmi kurum kimliğiniz ile elde ettiğiniz verileri paylaşamazsınız, dağıtamazsınız,

Hüseyin Atasoy
Reply
17 Ekim 2019 Perşembe, 12:20
#4

Üslubunuz niye daha da çirkinleşti anlamadım.
Hangi resmi kimliğimle kimi aldatmışım? Hangi bilgiyi nerede paylaşmış ya da dağıtmışım? Bir iftira atıyorsunuz; buyurun ispatını yapın. Varsa mağdur olan herhangi bir şekilde veya hakkında bilmişlik tasladığınız yasalara bir aykırılık durumu varsa buyurun elinizden geldiğince şikayet edin beni, ismim cismim belli. Hatta bana mail adresi bırakın size kimlik numaramı, adresimi falan da göndereyim.
İnsanlara parayla hizmet satıyorsunuz ve hizmeti kullanan kullanıcıların eleştirilerine tahammül edemiyorsunuz. Ben bir kullanıcınız ve dolayısıyla müşteriniz sayılırım. Bu nasıl üslup?
Umarım gerçekten Proliz'in bir çalışanı değilsinizdir. Birazdan bu çirkinlikle ilgili Proliz'le de iletişime geçeceğim...

 
 
Sayfa 40 sorgu ile 0.059 saniyede oluşturuldu.
Atasoy Blog v4 © 2008-2019 Hüseyin Atasoy