Python Kodları
Facebook ve selenium ile yukleme yapma - Baskı Önizleme

+- Python Kodları (http://qpython.club)
+-- Forum: Programlama Dilleri (http://qpython.club/forumdisplay.php?fid=3)
+--- Forum: Python (http://qpython.club/forumdisplay.php?fid=12)
+--- Konu Başlığı: Facebook ve selenium ile yukleme yapma (/showthread.php?tid=1303)



Facebook ve selenium ile yukleme yapma - oktay811 - 16-12-2018

Facebook da gruba dosya yüklemek için selenium ile yaptığım basit bir kod. Facebook dilini ingilizce yapın, windows da chrome ile sıkıntısız 100 den fazla partı yükledi.

"pip install selenium" ile selenium modülünü yükledikten sonra, bu scriptin olduğu klasöre http://chromedriver.chromium.org/downloads buradaki chromedriver.exe dosyasını eklemeyi unutmayın.

PHP Kod:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium
.webdriver.common.keys import Keys
from selenium
.webdriver.common.action_chains import ActionChains
import time
ossys

print(
"""
############################################################

#- Facebook Dosya Yukleme

#- windows-chrome icin

############################################################
"""
)

reload(sys)  
sys
.setdefaultencoding('utf8')
yer str(os.path.dirname(os.path.abspath(sys.argv[0])))+str(os.sep)
#Selenium Ayarlari, Ubuntu da kullanacaksaniz burayi mutlaka degistirin
chrome_options webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications" 2#chrome da bildirim engellemek icin
chrome_options.add_experimental_option("prefs",prefs)
chrome_options.add_argument("--incognito"#gizli sekmede islem yapmak icin
driver =webdriver.Chrome(yer+"chromedriver.exe",chrome_options=chrome_options)
print 
driver.session_id
    

def giris
(username,password):
        driver.get("https://en-gb.facebook.com/")
        driver.find_element_by_id("email").click()
        driver.find_element_by_id("email").clear()
        time.sleep(1)
        driver.find_element_by_id("email").send_keys(username)
        driver.find_element_by_id("pass").click()
        driver.find_element_by_id("pass").clear()
        time.sleep(1)
        driver.find_element_by_id("pass").send_keys(password)
        try:
            driver.find_element_by_id("pass").send_keys(Keys.ENTER)
        except:
            driver.find_element_by_id("u_0_2").click()
        time.sleep(5)
def yukle(sira,gkod):
        driver.get("https://www.facebook.com/groups/"+str(gkod)+"/files/")
        for i in sira:
            #print i.split(os.sep)[-1]
            try:
                driver.find_element_by_link_text("Upload FileUpload File").click()
                time.sleep(2)
            except:
                driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='Create Doc'])[1]/following::i[1]").click()
                time.sleep(2)
            sec=driver.find_element_by_name("file1").send_keys(i)
            time.sleep(2)
            try:
                driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='Select a file on your computer (Max size 100 MB)'])[1]/following::button[1]").click()
                time.sleep(2)
            except:
                sec.send_keys(Keys.TAB)
                time.sleep(0.5)
                sec.send_keys(Keys.ENTER)
                        
            time
.sleep(int(os.path.getsize(i))/(1024**2)) #her 1mb yukleme icin 1sn bekleyecek            
            while True:
                tag=driver.find_element_by_xpath('//*[@id="group_files_'+str(gkod)+'"]/li[1]').text
                
if str(tag).find(i.split(os.sep)[-1]) == -1:
                    print "Dosya henuz yuklenmemis, biraz daha bekleyelim."
                    time.sleep(10)
                else:
                    os.remove(yer+i#yuklenen partlari silmek icin
                    break
            print str(i.split(os.sep)[-1])+" yuklendi."
        print "Tum partlar yuklendi."
partlar=raw_input("Yuklenecek dosyalarin oldugu dizin,\nubuntu icin '/root/film/'\nwindows icin 'c:\\user\\desktop\\film\\' \nseklinde girin:\n")            
username
=raw_input("kullanici adi:\n")
password=raw_input("Sifre:\n")
gkod=raw_input("Grubun web sayfasinda 'https://www.facebook.com/groups/<kod veya isim>/files/'  kod veya ismi lazim:\n")          
giris
(username,password)
#time.sleep(10)
sira=[]
for 
i in os.listdir(partlar):
    sira.append(partlar+i)
    
yukle
(sira,gkod



Cvp: Facebook ve selenium ile yukleme yapma - ahmettepe - 16-12-2018

umarim linux ubuntu da çalişir. birazdan deneme yaparim.face paketimiz bitti ama elbet bir süre sonra benzer paketler cüzi fiyata veya bir takim paketlerin yaninda hediye olarak vereceklerdir.


Cvp: Facebook ve selenium ile yukleme yapma - oktay811 - 16-12-2018

Ubuntu icin selenium ve driver ayarlarını değiştirsen yeterli, sitedeki taglar zamanla veya tarayıcıya göre değişmediği sürece sıkıntı olmaz.


Cvp: Facebook ve selenium ile yukleme yapma - Ezio - 17-12-2018

Time sleep niye kullandın anlamadım, insanların bilgisayarı yavaşsa o süre zarfında işlem yapamazsa kod expcete düşmeyecek mi?


Cvp: Facebook ve selenium ile yukleme yapma - oktay811 - 17-12-2018

@Ezio tam tersine, vps ramleri düşük olduğu için selenium tarayıcıda tagleri bulamayınca hata veriyor. Ben de tarayıcıda sitenin tam açılması için time.sleep koydum. Vps lerde ağır çalışması için yapmıştım. Eğer pc özellikleri iyi ise time.sllepleri kaldırabilirsin.
Mesela;
try:
driver.find_element_by_link_text("Upload FileUpload File").click()
time.sleep(2)
except:
driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='Create Doc'])[1]/following::i[1]").click()
time.sleep(2)

Burada dosya yükleme penceresinin açılması için try kısımında click yaptıktan sonra 2 saniye pencerenin açılması için bekliyor sonra "sec=driver.find_element_by_name("file1").send_keys(i)" burada da listedeki dosyanın ismini yazdırıyor sonra devam ediyor.
Eğer time sleep koymazsak yükleme penceresinin açılmasını beklemeden hemen ismi göndermeye çalışacak, ama pencere henüz açılmadığı için hata verecek.
except kısmında ise dosya yükleme ekranını başka yolla açmak için koydum. İlki işe yaramazsa diye..


RE: Facebook ve selenium ile yukleme yapma - excel - 17-12-2018

turkcellde face paketi var mı hâla?


Cvp: RE: Facebook ve selenium ile yukleme yapma - ahmettepe - 17-12-2018

(17-12-2018, Saat: 18:00)excel Nickli Kullanıcıdan Alıntı: turkcellde face paketi var mı hâla?

yok diye biliyorum. ha saçma bir face paketi var fakat hem sınırlı ve kotasi düşük, hem de buna göre fiyatı pahali. şu an en uygunu turktelekomda aylik 9 tl sinirsiz face paketi diye biliyorum


Cvp: Facebook ve selenium ile yukleme yapma - gecemor - 17-12-2018

ttelekomdaki 1gb dan sonra hız sınırına giriyor diye biliyorum ben de. Vodafone'da var sosyal pass paketi, bu paket sınırsız ve kısıt yok. Ama haftalık 7 liraydı sanırım, bi ara kullanmıştım bir şeylerle uğraşırken.