Javascript ile THT'de Kullanıcı Aktivitelerini Görme | (Tampermonkey)

codinger06

Üye
1 Mar 2023
161
136
127.0.0.1
NOT : Bu scriptte THT'de halka açık bir şekilde verilmeyen hiçbir veri kullanılmamıştır. Scriptin veri topladığı yer zaten THT'nin kendi sayfası. Bakınız : https://www.turkhackteam.org/online/?type=member


Bu script zaten olan bir özelliği kullanmaktadır. Scriptin amacı bu olan özelliğin kullanımını kolaylaştırmak, erişilebilirliğini artırmaktır.


Haliyle ancak THT'nin izin verdiği kadarına ulaşılabilmektedir. Kendi profil aktivitesini kısıtlayan kullanıcıların verileri gözükmeyecektir.


Script THT'nin online kullanıcıların aktivitelerini gösterdiği sayfaya istek atıp tüm kullanıcıların ne yaptığı bilgisini çeker, herhangi bir konuda dolaşırken mesajı yazan kişinin kullanıcı adının hemen altına şu an forumda ne yaptığını yazdırır. Veya bir profile uğradığınızda o kişinin ne yaptığı yazdırılır. Eğer o kişi aktif değilse veya görünürlüğünü kısıtlamışsa veriler tam olarak yazdırılamayabilir.



Scripte gelecek olursak, verilerin çekildiği fonksiyonla başlayalım.
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
   
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1]   
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




           
            usersArray.push({username : uname, activity : activity});
        }                  


    }
   
    return usersArray;


}
İlk öncelikle gördüğümüz gibi URL ile alakalı olan bir kontrol var. Buna ihtiyaç duymamızın sebebi ise, turkhackteam.org adresine Javascript ile istek attığımız zaman eğer isteğin geldiği yer farklı ise çeşitli güvenlik nedenlerinden ötürü bu istek engelleniyor, ve ilk defa burada görüyorum https://turkhackteam.org ile https://www.turkhackteam.org (Başında www var) script içi tamamen farklı şeyler olabiliyor .

Eğer tarayıcınızdan www ekli bir şekilde siteye istek atarsanız ve aynı zamanda Javascript www ekli olmadan istek atarsa bu istek engelleniyor. O sebepten dolayı scriptte kontrol etmemiz gerekiyor siteye nasıl gelinmiş diye. Eğer siteye www ekli bir şekilde gelindiyse istek URL'si de www ekli bir şekilde olmak zorunda.

URL sorununu hallettikten sonra online kullanıcılar kısmında kaç sayfa var öğrenmemiz gerekiyor. Online kullanıcılar kısmına istek atıyoruz ve sayfaları temsil eden linklerin sayısına bakıyoruz. Sonuncu sayfayı temsil eden linkin içerisindeki numara bizim kaç defa online kullanıcılar kısmına istek atacağımızı belirliyor.

Sayfa sayısını öğrendikten sonra bir döngü ile tüm sayfalara istek atıyoruz. Önceden oluşturulmuş diziye teker teker tüm kullanıcı adları ve aktivitelerini ekliyoruz. THT'nin HTML yapısı nasıl bir şablona sahipse biz de o şablona uyarak kullanıcı adlarının bulunduğu divleri, aktivitelerin bulunduğu divleri döngüyle çekiyor ve işlemlerimizi gerçekleştirebiliyoruz. Tüm bunlar bittikten sonra ise return ile elimizde bulunan kullanıcılar ve aktivitelerini barındıran diziyi döndürüyoruz.
Şimdi ise bu aktivitelerin önümüze yazdırıldığı yere bakalım.
JavaScript:
if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }              
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

     
       
    }

}
Eğer herhangi bir konudaysak, yukarıdaki kod bloklarını çalıştıracağız. Konuya mesaj yazan herkesin profil bilgilerini barındıran divleri çekiyoruz.
Mesela :

Mesaj yazan herkesin profil bilgileri bu şekilde oluyor. O divler arasında bir döngüyle, her divin içerisindeki kullanıcı adını alıyoruz ve
fetchMembers() fonksiyonundan gelen kullanıcı adı - aktivite dizisine bakıyoruz dizinin içerisinde bu sahip olduğumuz kullanıcı adı geçiyor mu, eğer geçiyorsa o kullanıcının aktivitesini alıyor ve divde rütbesinin/ekibinin/rolünün geçtiği yazının hemen altına yazdırıyoruz.
Mesela :

Böylece konuda gezerken tüm mesaj yazanların aktivitelerine erişip yazdırabildik. Şimdi birisinin profiline girdiğimiz zaman ne yapacağımız aşağıda.
Yukarıdakileri hallettikten sonra neredeyse aynı mantık olacak.

JavaScript:
else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }              
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

     
       

}

Eğer bir konuyu değil de bir üyenin profilini görüntülüyorsak yukarıdaki kod blokları çalışacak. Sadece tek bir kişinin ne yaptığını yazdıracağımız için herhangi bir div döngüsüne ihtiyaç yok. Aynı yukarıdaki mantıkta olduğu gibi kullanıcı adını çekip fetchMembers() ile gelen dizinin içerisinde geçip geçmediğine bakıyoruz geçiyorsa aktivitesini yazdırıyoruz.
Mesela :

Profil kısıtlamaları hakkındaki örneklerden biri de bu oldu. Profilin hangi konuyu görüntülediği bilgisine sahip değiliz. Bu yüzden herhangi bir veri yazdıramıyoruz da.

Script bu kadar, sadece iznimiz kadarınca veriye erişebiliyoruz, ayrıca gizli sekmeden veya oturum açmadan kullanıcı aktivitelerini görüntüleyemezsiniz çünkü online üyeler kısmına erişmek için oturum açmak gerekiyor.


Async/Sync yapısını iyi yönetemedim, scriptin performansı düşük oldu. Eğer çok fazla cevap yazılmış bir konuya girerseniz kullanıcı aktivitelerinin gözükmesi biraz zaman alabilir.


Daha çok Sync kullanmak zorunda kaldım çünkü veri gelmeden ekrana yazdıramayız. Verinin gelmesini beklemek zorunda kaldım bu yüzden de çok fazla veri talep edildiği zaman bekleme süresi de aynı oranda arttı. Ayrıca kod çok dağınık. Refactor etmedim, fakat çalışıyor mu evet :ROFLMAO:



Kodun tamamı :
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1]  
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




           
            usersArray.push({username : uname, activity : activity});
        }                  


    }
   
    return usersArray;


}

if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }              
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

     
       
    }

}else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }              
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

     
       

}

Tampermonkey eklentisini kurduktan sonra yeni betik oluşturun ve sonra burayı kopyalayıp son // Userscript // yazan yerin altına yapıştırın.
Ayrıca @ match kısmını https://*.turkhackteam.org/* olarak değiştirin.

İyi forumlar




 

louise0357

Anka Underground Team
21 Tem 2023
492
179
/
NOT : Bu scriptte THT'de halka açık bir şekilde verilmeyen hiçbir veri kullanılmamıştır. Scriptin veri topladığı yer zaten THT'nin kendi sayfası. Bakınız : https://www.turkhackteam.org/online/?type=member


Bu script zaten olan bir özelliği kullanmaktadır. Scriptin amacı bu olan özelliğin kullanımını kolaylaştırmak, erişilebilirliğini artırmaktır.


Haliyle ancak THT'nin izin verdiği kadarına ulaşılabilmektedir. Kendi profil aktivitesini kısıtlayan kullanıcıların verileri gözükmeyecektir.


Script THT'nin online kullanıcıların aktivitelerini gösterdiği sayfaya istek atıp tüm kullanıcıların ne yaptığı bilgisini çeker, herhangi bir konuda dolaşırken mesajı yazan kişinin kullanıcı adının hemen altına şu an forumda ne yaptığını yazdırır. Veya bir profile uğradığınızda o kişinin ne yaptığı yazdırılır. Eğer o kişi aktif değilse veya görünürlüğünü kısıtlamışsa veriler tam olarak yazdırılamayabilir.



Scripte gelecek olursak, verilerin çekildiği fonksiyonla başlayalım.
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
  
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1]  
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}
İlk öncelikle gördüğümüz gibi URL ile alakalı olan bir kontrol var. Buna ihtiyaç duymamızın sebebi ise, turkhackteam.org adresine Javascript ile istek attığımız zaman eğer isteğin geldiği yer farklı ise çeşitli güvenlik nedenlerinden ötürü bu istek engelleniyor, ve ilk defa burada görüyorum https://turkhackteam.org ile https://www.turkhackteam.org (Başında www var) script içi tamamen farklı şeyler olabiliyor .

Eğer tarayıcınızdan www ekli bir şekilde siteye istek atarsanız ve aynı zamanda Javascript www ekli olmadan istek atarsa bu istek engelleniyor. O sebepten dolayı scriptte kontrol etmemiz gerekiyor siteye nasıl gelinmiş diye. Eğer siteye www ekli bir şekilde gelindiyse istek URL'si de www ekli bir şekilde olmak zorunda.

URL sorununu hallettikten sonra online kullanıcılar kısmında kaç sayfa var öğrenmemiz gerekiyor. Online kullanıcılar kısmına istek atıyoruz ve sayfaları temsil eden linklerin sayısına bakıyoruz. Sonuncu sayfayı temsil eden linkin içerisindeki numara bizim kaç defa online kullanıcılar kısmına istek atacağımızı belirliyor.

Sayfa sayısını öğrendikten sonra bir döngü ile tüm sayfalara istek atıyoruz. Önceden oluşturulmuş diziye teker teker tüm kullanıcı adları ve aktivitelerini ekliyoruz. THT'nin HTML yapısı nasıl bir şablona sahipse biz de o şablona uyarak kullanıcı adlarının bulunduğu divleri, aktivitelerin bulunduğu divleri döngüyle çekiyor ve işlemlerimizi gerçekleştirebiliyoruz. Tüm bunlar bittikten sonra ise return ile elimizde bulunan kullanıcılar ve aktivitelerini barındıran diziyi döndürüyoruz.
Şimdi ise bu aktivitelerin önümüze yazdırıldığı yere bakalım.
JavaScript:
if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}
Eğer herhangi bir konudaysak, yukarıdaki kod bloklarını çalıştıracağız. Konuya mesaj yazan herkesin profil bilgilerini barındıran divleri çekiyoruz.
Mesela :

Mesaj yazan herkesin profil bilgileri bu şekilde oluyor. O divler arasında bir döngüyle, her divin içerisindeki kullanıcı adını alıyoruz ve
fetchMembers() fonksiyonundan gelen kullanıcı adı - aktivite dizisine bakıyoruz dizinin içerisinde bu sahip olduğumuz kullanıcı adı geçiyor mu, eğer geçiyorsa o kullanıcının aktivitesini alıyor ve divde rütbesinin/ekibinin/rolünün geçtiği yazının hemen altına yazdırıyoruz.
Mesela :

Böylece konuda gezerken tüm mesaj yazanların aktivitelerine erişip yazdırabildik. Şimdi birisinin profiline girdiğimiz zaman ne yapacağımız aşağıda.
Yukarıdakileri hallettikten sonra neredeyse aynı mantık olacak.

JavaScript:
else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Eğer bir konuyu değil de bir üyenin profilini görüntülüyorsak yukarıdaki kod blokları çalışacak. Sadece tek bir kişinin ne yaptığını yazdıracağımız için herhangi bir div döngüsüne ihtiyaç yok. Aynı yukarıdaki mantıkta olduğu gibi kullanıcı adını çekip fetchMembers() ile gelen dizinin içerisinde geçip geçmediğine bakıyoruz geçiyorsa aktivitesini yazdırıyoruz.
Mesela :

Profil kısıtlamaları hakkındaki örneklerden biri de bu oldu. Profilin hangi konuyu görüntülediği bilgisine sahip değiliz. Bu yüzden herhangi bir veri yazdıramıyoruz da.

Script bu kadar, sadece iznimiz kadarınca veriye erişebiliyoruz, ayrıca gizli sekmeden veya oturum açmadan kullanıcı aktivitelerini görüntüleyemezsiniz çünkü online üyeler kısmına erişmek için oturum açmak gerekiyor.


Async/Sync yapısını iyi yönetemedim, scriptin performansı düşük oldu. Eğer çok fazla cevap yazılmış bir konuya girerseniz kullanıcı aktivitelerinin gözükmesi biraz zaman alabilir.


Daha çok Sync kullanmak zorunda kaldım çünkü veri gelmeden ekrana yazdıramayız. Verinin gelmesini beklemek zorunda kaldım bu yüzden de çok fazla veri talep edildiği zaman bekleme süresi de aynı oranda arttı. Ayrıca kod çok dağınık. Refactor etmedim, fakat çalışıyor mu evet :ROFLMAO:



Kodun tamamı :
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1] 
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}

if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Tampermonkey eklentisini kurduktan sonra yeni betik oluşturun ve sonra burayı kopyalayıp son // Userscript // yazan yerin altına yapıştırın.
Ayrıca @ match kısmını https://*.turkhackteam.org/* olarak değiştirin.

İyi forumlar




Eline sağlık
 

codinger06

Üye
1 Mar 2023
161
136
127.0.0.1
Son düzenleme:

Yagami Light0

Katılımcı Üye
5 May 2023
712
318
NOT : Bu scriptte THT'de halka açık bir şekilde verilmeyen hiçbir veri kullanılmamıştır. Scriptin veri topladığı yer zaten THT'nin kendi sayfası. Bakınız : https://www.turkhackteam.org/online/?type=member


Bu script zaten olan bir özelliği kullanmaktadır. Scriptin amacı bu olan özelliğin kullanımını kolaylaştırmak, erişilebilirliğini artırmaktır.


Haliyle ancak THT'nin izin verdiği kadarına ulaşılabilmektedir. Kendi profil aktivitesini kısıtlayan kullanıcıların verileri gözükmeyecektir.


Script THT'nin online kullanıcıların aktivitelerini gösterdiği sayfaya istek atıp tüm kullanıcıların ne yaptığı bilgisini çeker, herhangi bir konuda dolaşırken mesajı yazan kişinin kullanıcı adının hemen altına şu an forumda ne yaptığını yazdırır. Veya bir profile uğradığınızda o kişinin ne yaptığı yazdırılır. Eğer o kişi aktif değilse veya görünürlüğünü kısıtlamışsa veriler tam olarak yazdırılamayabilir.



Scripte gelecek olursak, verilerin çekildiği fonksiyonla başlayalım.
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
  
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1]  
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}
İlk öncelikle gördüğümüz gibi URL ile alakalı olan bir kontrol var. Buna ihtiyaç duymamızın sebebi ise, turkhackteam.org adresine Javascript ile istek attığımız zaman eğer isteğin geldiği yer farklı ise çeşitli güvenlik nedenlerinden ötürü bu istek engelleniyor, ve ilk defa burada görüyorum https://turkhackteam.org ile TurkHackTeam (Başında www var) script içi tamamen farklı şeyler olabiliyor .

Eğer tarayıcınızdan www ekli bir şekilde siteye istek atarsanız ve aynı zamanda Javascript www ekli olmadan istek atarsa bu istek engelleniyor. O sebepten dolayı scriptte kontrol etmemiz gerekiyor siteye nasıl gelinmiş diye. Eğer siteye www ekli bir şekilde gelindiyse istek URL'si de www ekli bir şekilde olmak zorunda.

URL sorununu hallettikten sonra online kullanıcılar kısmında kaç sayfa var öğrenmemiz gerekiyor. Online kullanıcılar kısmına istek atıyoruz ve sayfaları temsil eden linklerin sayısına bakıyoruz. Sonuncu sayfayı temsil eden linkin içerisindeki numara bizim kaç defa online kullanıcılar kısmına istek atacağımızı belirliyor.

Sayfa sayısını öğrendikten sonra bir döngü ile tüm sayfalara istek atıyoruz. Önceden oluşturulmuş diziye teker teker tüm kullanıcı adları ve aktivitelerini ekliyoruz. THT'nin HTML yapısı nasıl bir şablona sahipse biz de o şablona uyarak kullanıcı adlarının bulunduğu divleri, aktivitelerin bulunduğu divleri döngüyle çekiyor ve işlemlerimizi gerçekleştirebiliyoruz. Tüm bunlar bittikten sonra ise return ile elimizde bulunan kullanıcılar ve aktivitelerini barındıran diziyi döndürüyoruz.
Şimdi ise bu aktivitelerin önümüze yazdırıldığı yere bakalım.
JavaScript:
if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}
Eğer herhangi bir konudaysak, yukarıdaki kod bloklarını çalıştıracağız. Konuya mesaj yazan herkesin profil bilgilerini barındıran divleri çekiyoruz.
Mesela :

Mesaj yazan herkesin profil bilgileri bu şekilde oluyor. O divler arasında bir döngüyle, her divin içerisindeki kullanıcı adını alıyoruz ve
fetchMembers() fonksiyonundan gelen kullanıcı adı - aktivite dizisine bakıyoruz dizinin içerisinde bu sahip olduğumuz kullanıcı adı geçiyor mu, eğer geçiyorsa o kullanıcının aktivitesini alıyor ve divde rütbesinin/ekibinin/rolünün geçtiği yazının hemen altına yazdırıyoruz.
Mesela :

Böylece konuda gezerken tüm mesaj yazanların aktivitelerine erişip yazdırabildik. Şimdi birisinin profiline girdiğimiz zaman ne yapacağımız aşağıda.
Yukarıdakileri hallettikten sonra neredeyse aynı mantık olacak.

JavaScript:
else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Eğer bir konuyu değil de bir üyenin profilini görüntülüyorsak yukarıdaki kod blokları çalışacak. Sadece tek bir kişinin ne yaptığını yazdıracağımız için herhangi bir div döngüsüne ihtiyaç yok. Aynı yukarıdaki mantıkta olduğu gibi kullanıcı adını çekip fetchMembers() ile gelen dizinin içerisinde geçip geçmediğine bakıyoruz geçiyorsa aktivitesini yazdırıyoruz.
Mesela :

Profil kısıtlamaları hakkındaki örneklerden biri de bu oldu. Profilin hangi konuyu görüntülediği bilgisine sahip değiliz. Bu yüzden herhangi bir veri yazdıramıyoruz da.

Script bu kadar, sadece iznimiz kadarınca veriye erişebiliyoruz, ayrıca gizli sekmeden veya oturum açmadan kullanıcı aktivitelerini görüntüleyemezsiniz çünkü online üyeler kısmına erişmek için oturum açmak gerekiyor.


Async/Sync yapısını iyi yönetemedim, scriptin performansı düşük oldu. Eğer çok fazla cevap yazılmış bir konuya girerseniz kullanıcı aktivitelerinin gözükmesi biraz zaman alabilir.


Daha çok Sync kullanmak zorunda kaldım çünkü veri gelmeden ekrana yazdıramayız. Verinin gelmesini beklemek zorunda kaldım bu yüzden de çok fazla veri talep edildiği zaman bekleme süresi de aynı oranda arttı. Ayrıca kod çok dağınık. Refactor etmedim, fakat çalışıyor mu evet :ROFLMAO:



Kodun tamamı :
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1] 
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}

if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Tampermonkey eklentisini kurduktan sonra yeni betik oluşturun ve sonra burayı kopyalayıp son // Userscript // yazan yerin altına yapıştırın.
Ayrıca @ match kısmını https://*.turkhackteam.org/* olarak değiştirin.

İyi forumlar




eline saglik
 

Speedy Gonzales

Katılımcı Üye
12 Kas 2021
634
296
in every technology system
NOT : Bu scriptte THT'de halka açık bir şekilde verilmeyen hiçbir veri kullanılmamıştır. Scriptin veri topladığı yer zaten THT'nin kendi sayfası. Bakınız : https://www.turkhackteam.org/online/?type=member


Bu script zaten olan bir özelliği kullanmaktadır. Scriptin amacı bu olan özelliğin kullanımını kolaylaştırmak, erişilebilirliğini artırmaktır.


Haliyle ancak THT'nin izin verdiği kadarına ulaşılabilmektedir. Kendi profil aktivitesini kısıtlayan kullanıcıların verileri gözükmeyecektir.


Script THT'nin online kullanıcıların aktivitelerini gösterdiği sayfaya istek atıp tüm kullanıcıların ne yaptığı bilgisini çeker, herhangi bir konuda dolaşırken mesajı yazan kişinin kullanıcı adının hemen altına şu an forumda ne yaptığını yazdırır. Veya bir profile uğradığınızda o kişinin ne yaptığı yazdırılır. Eğer o kişi aktif değilse veya görünürlüğünü kısıtlamışsa veriler tam olarak yazdırılamayabilir.



Scripte gelecek olursak, verilerin çekildiği fonksiyonla başlayalım.
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
  
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1]  
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}
İlk öncelikle gördüğümüz gibi URL ile alakalı olan bir kontrol var. Buna ihtiyaç duymamızın sebebi ise, turkhackteam.org adresine Javascript ile istek attığımız zaman eğer isteğin geldiği yer farklı ise çeşitli güvenlik nedenlerinden ötürü bu istek engelleniyor, ve ilk defa burada görüyorum https://turkhackteam.org ile https://www.turkhackteam.org (Başında www var) script içi tamamen farklı şeyler olabiliyor .

Eğer tarayıcınızdan www ekli bir şekilde siteye istek atarsanız ve aynı zamanda Javascript www ekli olmadan istek atarsa bu istek engelleniyor. O sebepten dolayı scriptte kontrol etmemiz gerekiyor siteye nasıl gelinmiş diye. Eğer siteye www ekli bir şekilde gelindiyse istek URL'si de www ekli bir şekilde olmak zorunda.

URL sorununu hallettikten sonra online kullanıcılar kısmında kaç sayfa var öğrenmemiz gerekiyor. Online kullanıcılar kısmına istek atıyoruz ve sayfaları temsil eden linklerin sayısına bakıyoruz. Sonuncu sayfayı temsil eden linkin içerisindeki numara bizim kaç defa online kullanıcılar kısmına istek atacağımızı belirliyor.

Sayfa sayısını öğrendikten sonra bir döngü ile tüm sayfalara istek atıyoruz. Önceden oluşturulmuş diziye teker teker tüm kullanıcı adları ve aktivitelerini ekliyoruz. THT'nin HTML yapısı nasıl bir şablona sahipse biz de o şablona uyarak kullanıcı adlarının bulunduğu divleri, aktivitelerin bulunduğu divleri döngüyle çekiyor ve işlemlerimizi gerçekleştirebiliyoruz. Tüm bunlar bittikten sonra ise return ile elimizde bulunan kullanıcılar ve aktivitelerini barındıran diziyi döndürüyoruz.
Şimdi ise bu aktivitelerin önümüze yazdırıldığı yere bakalım.
JavaScript:
if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}
Eğer herhangi bir konudaysak, yukarıdaki kod bloklarını çalıştıracağız. Konuya mesaj yazan herkesin profil bilgilerini barındıran divleri çekiyoruz.
Mesela :

Mesaj yazan herkesin profil bilgileri bu şekilde oluyor. O divler arasında bir döngüyle, her divin içerisindeki kullanıcı adını alıyoruz ve
fetchMembers() fonksiyonundan gelen kullanıcı adı - aktivite dizisine bakıyoruz dizinin içerisinde bu sahip olduğumuz kullanıcı adı geçiyor mu, eğer geçiyorsa o kullanıcının aktivitesini alıyor ve divde rütbesinin/ekibinin/rolünün geçtiği yazının hemen altına yazdırıyoruz.
Mesela :

Böylece konuda gezerken tüm mesaj yazanların aktivitelerine erişip yazdırabildik. Şimdi birisinin profiline girdiğimiz zaman ne yapacağımız aşağıda.
Yukarıdakileri hallettikten sonra neredeyse aynı mantık olacak.

JavaScript:
else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Eğer bir konuyu değil de bir üyenin profilini görüntülüyorsak yukarıdaki kod blokları çalışacak. Sadece tek bir kişinin ne yaptığını yazdıracağımız için herhangi bir div döngüsüne ihtiyaç yok. Aynı yukarıdaki mantıkta olduğu gibi kullanıcı adını çekip fetchMembers() ile gelen dizinin içerisinde geçip geçmediğine bakıyoruz geçiyorsa aktivitesini yazdırıyoruz.
Mesela :

Profil kısıtlamaları hakkındaki örneklerden biri de bu oldu. Profilin hangi konuyu görüntülediği bilgisine sahip değiliz. Bu yüzden herhangi bir veri yazdıramıyoruz da.

Script bu kadar, sadece iznimiz kadarınca veriye erişebiliyoruz, ayrıca gizli sekmeden veya oturum açmadan kullanıcı aktivitelerini görüntüleyemezsiniz çünkü online üyeler kısmına erişmek için oturum açmak gerekiyor.


Async/Sync yapısını iyi yönetemedim, scriptin performansı düşük oldu. Eğer çok fazla cevap yazılmış bir konuya girerseniz kullanıcı aktivitelerinin gözükmesi biraz zaman alabilir.


Daha çok Sync kullanmak zorunda kaldım çünkü veri gelmeden ekrana yazdıramayız. Verinin gelmesini beklemek zorunda kaldım bu yüzden de çok fazla veri talep edildiği zaman bekleme süresi de aynı oranda arttı. Ayrıca kod çok dağınık. Refactor etmedim, fakat çalışıyor mu evet :ROFLMAO:



Kodun tamamı :
JavaScript:
async function fetchMembers(){
    var URL = "";
    if(window.location.href.includes("www")){
        URL = "https://www.turkhackteam.org"
    }else{
        URL = "https://turkhackteam.org";
    }

    var html = await fetch(`${URL}/online/?type=member`)
    if(!html.ok){
        return "operation failed";
    }

    html = await html.text();
    var invisibleDiv = document.createElement("div")
    invisibleDiv.innerHTML = html;

    var containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]


    var lastPageIndex = containerDiv.getElementsByClassName("pageNavSimple")[0]
    if(lastPageIndex.getElementsByTagName("a").length > 0){
        lastPageIndex = lastPageIndex.getElementsByTagName("a")[lastPageIndex.getElementsByTagName("a").length -1]
        lastPageIndex = lastPageIndex.href[lastPageIndex.href.length - 1] 
    }else{
        lastPageIndex = 1;
    }



    var users;
    var uname;
    var activity;
    var containerDiv = null;
    var invisibleDiv = null;
    var usersArray = [];

    for(let j = 1; j <= lastPageIndex; j++){
        var allUsersHtml = await fetch(`${URL}/online/?type=member&page=${j}`)
        if(!allUsersHtml.ok){
            return "operation failed";
        }

        allUsersHtml = await allUsersHtml.text()
        invisibleDiv = document.createElement("div")
        invisibleDiv.innerHTML = allUsersHtml;

        containerDiv = invisibleDiv.getElementsByClassName("p-body-pageContent")[0]

        users = containerDiv.getElementsByClassName("block-row")
        // console.log(containerDiv)

        for(let i = 0; i < users.length; i++){
            uname = "";
            activity = "";
            activityString = "";

            if(users[i].getElementsByClassName("username")[0].innerHTML.includes("--")){
                uname = users[i].getElementsByClassName("username")[0].getElementsByTagName("span")[0].innerText
            }else{
                uname = users[i].getElementsByClassName("username")[0].innerText
            }

            activity = users[i].getElementsByClassName("listInline")[0]




          
            usersArray.push({username : uname, activity : activity});
        }                 


    }
  
    return usersArray;


}

if(window.location.href.split("/")[3] == "konular"){
    var userDetails = document.getElementsByClassName("message-userDetails")
    var username;

    for(let i = 0; i < userDetails.length; i++){
        username = "";

        if(userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span").length > 0){
            username = userDetails[i].getElementsByClassName("username ")[0].getElementsByTagName("span")[0].innerText
        }else{
            username = userDetails[i].getElementsByClassName("username ")[0].innerText;
        }

        var allUsers = await fetchMembers();
        var activity = 0;

        for(e of allUsers){
            if(e.username == username){
                activity = e.activity;
            }             
        }

        if(activity){
            userDetails[i].getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML;
        }

    
      
    }

}else if(window.location.href.split("/")[3] == "uye"){
    var user = document.getElementsByClassName("memberHeader-nameWrapper")[0].getElementsByTagName("span")[0]
    var activity = 0;
    var username;

    if(user.getElementsByTagName("span").length > 0){
        username = user.getElementsByTagName("span")[0].innerText
    }else{
        username = user.innerText
    }

    var allUsers = await fetchMembers();

    for(e of allUsers){
        if(e.username == username){
            activity = e.activity;
        }             
    }

    if(activity){
        document.getElementsByClassName("userTitle")[0].innerHTML += "<br><br>" + activity.innerHTML + "<br>";
    }

    
      

}

Tampermonkey eklentisini kurduktan sonra yeni betik oluşturun ve sonra burayı kopyalayıp son // Userscript // yazan yerin altına yapıştırın.
Ayrıca @ match kısmını https://*.turkhackteam.org/* olarak değiştirin.

İyi forumlar




eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.