Çekiliş konularının sayısında artış görünce @Kerem00 ile bu işi otomatikleştiren bir şeyler deneyesimiz geldi, 1-2 günlük uğraş sonucunda ortaya böyle bir şey çıktı. En çok kullanılan iki tarayıcı Chrome ve Firefox desteği var şimdilik. Test eden arkadaşların deneyimlerine, düzeltme ve geliştirme önerilerine açığız.
İsterseniz kaynak kodundan çalıştırabilir, isterseniz de şu bağlantıdan çalıştırabilir sürümü indirebilirsiniz.
Bir de son olarak ricam, çekiliş konunuzda bu script'i kullanırsanız çıktıyı herkesi almış mı diye kontrol edin, dolaylı yoldan hak yemiş olmayayım
Konunun ilk sayfa bağlantısını giriyorsunuz, o sayfa tarayıcı üzerinde açılıyor, foruma giriş yapıp script'i devam ettiriyorsunuz. Ardından sayfa sayfa herkesin adını alarak
usernames listesine ekliyor. En son da random kütüphanesi ile o listeden istenilen kişi sayısı kadar kişi çekiyor.- Selenium tarayıcıyı kendisi açtığı zaman konu, ziyaretçi görünümüyle açıldığı için güncel mesajları göstermiyor. Bu yüzden üye olarak giriş yapmak gerekiyor.
- Çerez pop-up'ını try-except kullanarak kapatmaya çalıştık.
- Selenium'un çalışabilmesi için geckodriver ya da ChromeDriver gerekiyor.
- Dimension temada, makale ve soru tipi konularda çalışmıyor çünkü buton yerleri farklı.
- Birden fazla kez aynı kişileri çekme ihtimali var.
- Pyinstaller ile çalıştırılabilir hale dönüştürüldüğünde son satır çalışmıyor.
- Giriş yapan kullanıcının göz ardı ettiği bir üye, çekiliş konusuna yazmışsa listede boş bir satır görünüyor.
- Konu sahibini de listeye ekliyor
Python:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import SessionNotCreatedException
from selenium.common.exceptions import WebDriverException
import time
import random
global browser
usernames = []
while True:
URL = input("Çekiliş konusunun linkini girin\n")
if URL.startswith("https://www.technopat.net/sosyal/konu/"):
break
try:
browser = webdriver.Chrome(executable_path="chromedriver.exe")
print("Chrome kullanılacak")
except WebDriverException:
print("Chrome bulunamadı, Firefox aranıyor")
try:
browser = webdriver.Firefox(executable_path="geckodriver.exe")
print("Firefox kullanılacak")
except SessionNotCreatedException:
print("Firefox da bulunamadı")
input("Çıkmak için Enter'a basın")
quit()
except WebDriverException:
print("Firefox ya da geckodriver.exe bulunamadı")
input("Çıkmak için Enter'a basın")
quit()
browser.get(URL)
try:
time.sleep(1)
browser.find_element_by_xpath("/html/body/div[4]/div/div[1]/a").click()
browser.find_element_by_xpath("/html/body/div[1]/div[1]/nav/div/div[3]/div[1]/a[1]").click()
except NoSuchElementException:
try:
browser.find_element_by_xpath("/html/body/div[2]/div[1]/nav/div/div[3]/div[1]/a[1]/span").click()
except NoSuchElementException:
browser.find_element_by_xpath("/html/body/div[1]/div[1]/nav/div/div[3]/div[1]/a[1]").click()
input("Giriş yaptıktan sonra Enter'a basın")
print("-"*20)
pagenumber = browser.find_element_by_css_selector("div.b-outer:nth-child(2) > div:nth-child(1) > nav:nth-child(1) > div:nth-child(1) > ul:nth-child(1) > li:nth-child(5)")
for i in range(1, int(pagenumber.text)+1):
try:
for x in browser.find_elements_by_class_name("m-name"):
if x.text not in usernames:
usernames.append(x.text)
if i == 1:
browser.find_element_by_xpath("/html/body/div[1]/div[4]/div/div[2]/div[3]/div/div[1]/div[1]/div[1]/nav/div[1]/a").click()
else:
browser.find_element_by_xpath("/html/body/div[1]/div[4]/div/div[2]/div[3]/div/div[1]/div[1]/div[1]/nav/div[1]/a[2]").click()
except NoSuchElementException:
print(f"{i} sayfa tarandı")
print("-"*20)
usernames.sort(key=str.lower)
for q in usernames:
print(q)
print("-"*40)
while True:
try:
total_number = int(input(f"Listede {len(usernames)} kişi var, kaç kişi seçilecek?\n"))
if total_number <= len(usernames):
for _ in range(0, total_number):
print(random.choice(usernames))
break
else:
print(f"{len(usernames)}'den küçük bir sayı girin")
except ValueError:
print(f"{len(usernames)}'den küçük bir SAYI girin")
input("\nÇıkmak için Enter'a basın")
İsterseniz kaynak kodundan çalıştırabilir, isterseniz de şu bağlantıdan çalıştırabilir sürümü indirebilirsiniz.
Bir de son olarak ricam, çekiliş konunuzda bu script'i kullanırsanız çıktıyı herkesi almış mı diye kontrol edin, dolaylı yoldan hak yemiş olmayayım