Python web scraping scrolling

İnstagramda’ki takip edilen kullanıcıları çekmek için bir script yazdım. Selenium kullanarak
takip edilen kullanıcıları gösteren ekrana kadar geldim fakat burda bir problem ile karşılaştım yardımınıza ihtiyacım var. Sorunum şu :

Selenium modülü ile sayfayı scroll edebiliyorum fakat sayfanın içinde ayrı bir pencere’yi scroll etmem gerekiyor. Onun için pencerenin elementini find_element_by_xpath() metodu ile buldum element.send_keys(Keys.END) şeklinde pencerenin sonuna gitmeye çalıştım fakat hata aldım alt ve üstte bulunan diğer elementler üzerinden denedim fakat yine aynı hatayı alıyorum.

Yani kısaca bir sayfa içindeki başka bir pencereyi nasıl scroll edebilirim yardımcı olabilecek var mı ?

Sizlere de merhaba hoşgeldiniz.

from time import sleep

buttons = browser.find_elements_by_css_selector("._bnq48)
followersButton = buttons[1]
followersButton.click()
sleep(2)

jscommand = 
"""
followers = document.querySelector("._gs38e");
followers.scrollTo(0, followers.scrollHeight);
var lenOfPage = followers.scrollHeight;
return lenOfPage;
"""

lenOfPage = browser.execute_script(jscommand)
match=False

while (match == False):
    lastcount = lenOfPage
    sleep(2)
    lenOfPage = browser.execute_script(jscommand)
    if lastCount == lenOfPage:
        match = True
sleep(3)

browser.close()

Daha önce bu bahsettiğin işlemi bu şekilde yapmıştım eğer class değeri değişmediyse takipçi div’inin bu program çalışıyor. Güncel olarak bilgim yok. Şuan bunu deneyemiyorum. bu yazdıklarım senin ihtiyaç duyacağın kısımlar bunlardan önce tarayıcı açma login gibi bölümlere entegre edersin. değişkenleri de kendine göre düzenlersin. Bu arada;

hata mesajını da paylaşırsan güzel olur

File “workshop.py”, line 81
lastcount = lenOfPage
^
TabError: inconsistent use of tabs and spaces in indentation

Bu hatayı aldım jscommand değişkenini tanımladığınız yere kadar kendim gelmiştim fakat javascript bilmiyorum ve devamını getiremedim ayrıca class değerini tam olarak nerden aldığınızı söyleyebilir misiniz aynı yeri gösteren bir çok div var bu gibi durumlarda hangisini seçeceğimi nerden bilebilirim ?

Verilen kodda sözdizimi hatası var, @tevhidulvahset düzeltip atar büyük ihtimalle

kendi bilgisayarıma geçtim şuan. Güncelleyip kodu çalıştırıp buraya tam halini atacağım. Biraz müsaade istiyorum.

evet tahmin ettiğim gibi class değeri değişmiş. Ayrıca liste kullanıp içerisinde farklı bir class değeri ile a etiketi dahil olmuş. kısacası benim yaptığım zamanki gibi değil şuan. Biraz uğraşılsa aslında çözülür fakat şuan için vaktim yok kusura bakmayın.

Peki bunu javascript dışında yapmanın yolu yok mu yani sayfanın içindeki başka bir pencerenin scrollunu kaydırmak için farklı bir dil kullanmadan çözemez miyim ?

illa ki vardır. sana tavsiye edeceğim şey şu. python selenium medium bunu google da arat. çıkan sonuçlar arasından dersleri hızlıca incele scroll konusu illa ki vardır. Bak oradan uygula. Ben şuan kendi projeme vakit ayırmam gerektiği için araştıramıyorum. Yardımcı olamadığım için kusura bakma.

1 Beğeni

Çok teşekkür ederim yardımınız için biraz daha öğrenip öyle denemem lazım demek ki. Kolay gelsin size de iyi geceler.

1 Beğeni

Hocam bugün tekrar oturdum yaklaşık 3 4 saatlik araştırma ve uğraş sonunda başardım.
Yapamayan arkadaşlar olursa diye de nasıl çözdüğümü paylaşmak istedim umarım rahatsızlık verimiyorumdur. execute_script() fonksiyonundaki js kodunu internetten buldum. Ve rica etsem kodu inceleyebilir misiniz ? Özellikle şu scroll countu hesaplarken tam değeri hesaplayamadım.

follower_element = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/header/section/ul/li[2]/a')
follower_element.click()

sleep(2)

scroll_follower_element = driver.find_element_by_xpath('/html/body/div[4]/div/div/div[2]')
follower_scroll_count = ((int(follower_count) // 12) + 1) * 2
follower_scroll_time = 0

while follower_scroll_time <= follower_scroll_count:
	
	driver.execute_script('arguments[0].scrollTop = arguments[0].scrollTop + arguments[0].offsetHeight;', scroll_follower_element)
	sleep(0.5)
	follower_scroll_time += 1