Selenium ile instagramda fotoğrafımı beğenen kişilerin kullanıcı adlarını çekeceğim.
Açılır boxa tıklıyorum, fakat scrollbar ile kaydırmak istediğimde sadece 2 kere aşağıya iniyor ve sonra duruyor. Tamamen aşağıya gitmesini nasıl sağlarım?
Web sayfalarında, space tuşu aşağı doğru kaydırma (scroll) yapar. Siz iki kere space tuşuna basmasını istemişsiniz. Yani aslında istediğiniz işi yapıyor.
Hocam çalıştırdım kodu ama bu sefer sayfada aşağıya iniyor. şöyle atayım
browser.find_element_by_xpath("//*[@id='react-root']/section/main/div/header/section/ul/li[3]/a").click()```
bu kod'da instagramda takipçilerime tıklıyor ve açılıyor. sonrasında sizin verdiğiniz js ile aşağıya indirme kodunu yazdığımda ise arka tarafta kalan profilde iniyor. Bu açılan box'da nasıl inmesini sağlarım?
Hocam, instagram her bir indirişte 12 kişiden sonra durduruyordu. Ben de takipçi sayımı 12 ye bölüp bir while döngüsüne soktum ve sizin verdiğiniz kodla kişileri aşağıya indirdim. Çok teşekkür ederim. Şimdi sorun şu, while döngüsünde indikten sonra, i’yi arttırmadan önce dosyaya kişilerin adlarını yazdırmak istedim fakat olmadı. o kodu da yazıyorum şimdi
while scrollx<346:
time.sleep(4)
browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", tutus)
begenil = browser.find_elements_by_css_selector("li")
followerList = []
i = 0
for user in begenil:
link = user.find_element_by_css_selector("a").get_attribute("title")
followerList.append(link)
with open("begenen.txt", "a+",encoding="UTF-8") as file:
for item in followerList:
file.write(item + "\n")
i += 1
if i == max:
break
scrollx+=1
Hocam şöyle söyleyeyim. Önce get ile bir fotoğrafıma gidiyorum. Sonra beğenenlere basıyorum. Scroll aşağı da iniyor. Fakat kişilerin title sini almam. Kullanıcı adları orası. Fakat bir tane alıp alt taraftakileri almıyor txt’ye.
İnstagramınız varsa eğer, bir fotoğrafınıza girip, fotoğrafınızı beğenen kişilerin titlesini alacağım python kodunu yazma şansınız var mı? Txt’ye kaydedecek
Ek olarak şu kısma böyle bir for ekledim boş list döndürüyor
while scrollx<346:
time.sleep(4)
for i in range(1,12):
tuttu= browser.find_elements_by_css_selector("body > div:nth-child(4) > div > div > div:nth-child(1) > div > div>div:nth-child("+str(i)+") > div >div:nth-child(1) > div > div > a").get_attribute("title")
print(tuttu)
browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", tutus)
scrollx+=1```
find_element_by_css_selector ile find_elements_by_css_selector farklı metodlar.
Bkz. Locating Elements
Sizin kullandığınız metod, sadece bir element döndürüyor. Muhtemelen bu yüzden sadece ilk kişinin ismini alabiliyorsunuz.
Üzgünüm, bunun için pek vaktim olduğunu söyleyemem.
Bu çok büyük kabalık. Ben size yardım etmeye çalışıyorum, elimden geldiğince. Selenium kütüphanesini bildiğimi mi sanıyorsunuz? Bilmiyorum, ama sırf size yardımcı olabilmek için vakit ayırıp araştırıyorum. İlk 2 probleminizi çözdüm, sonuncusunu ise sizin çözmenizi istedim. Çünkü hem fazla vaktim yok hem de araştırılarak çözülebilecek bir problem. Ancak siz, hazır kod istediğiniz için ve bende bunu vermediğim için, kabalık edip kendinizi haklı çıkarmayı tercih ettiniz.
Söyleyecek bir şey bulamıyorum, iyi çalışmalar.
Açık konuşmak gerekirse araştırma yapan biriyim. Verdiğiniz kodu siz yazmadan yaklaşık 10 dakika önce bulmama rağmen uğraştığınız için yine de teşekkür ettim. Araştırma yaptığımda bulabiliyor olsaydım zaten buraya sormazdım. İyi çalışmalar.
Beğenenlerin sayısı çok ise, hepsini elde etmek için beğenenlerin bulunduğu sekmede aşağı kaydırmak gerek. Bunun için orada bulunan herhangi bir butonu bulup, kodun sonuna .send_keys(Keys.PAGE_DOWN) ekleyebilirsiniz. Sekmenin sonuna ulaşıp ulaşmadığını kontrol etmek için de bir döngü oluşturup, döngünün başında ve sonunda beğenenlerin sayısını çekerek onları karşılaştırabilirsiniz. Eğer sayı aynı ise döngüyü doğrudan durdurabilir veya bunun için bir sayaç tanımlayıp sayac değerine 1 ekleyebilirsiniz.
Beğenenlerin isimlerini elde ederken de find_elements ile veya tüm isimleri kapsayan bir sınıfı bulup find_element ile çekebilirsiniz. Kodun sonuna .text eklerseniz istediğinizi elde edebilirsiniz diye düşünüyorum.