from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Chrome()
browser.get("https://twitter.com/")
time.sleep(3)
girisYap = browser.find_element_by_xpath("//*[@id='doc']/div/div[1]/div[1]/div[2]/div[2]/div/a[2]")
girisYap.click()
time.sleep(5)
username = browser.find_element_by_xpath("//*[@id='page-container']/div/div[1]/form/fieldset/div[1]/input")
password = browser.find_element_by_xpath("//*[@id='page-container']/div/div[1]/form/fieldset/div[2]/input")
username.send_keys("******")
password.send_keys("******")
time.sleep(3)
login = browser.find_element_by_xpath("//*[@id='page-container']/div/div[1]/form/div[2]/button")
login.click()
time.sleep(5)
searchArea = browser.find_element_by_xpath("//*[@id='react-root']/div/div/div/main/div/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div/form/div[1]/div/div/div[2]/input")
searchArea.send_keys("#yazilimayolver")
searchArea.send_keys(Keys.ENTER)
elements = browser.find_elements_by_css_selector(".css-901oao.css-16my406.r-1qd0xha.r-ad9z0x.r-bcqeeo.r-qvutc0")
for x in elements:
print("************************")
print(x.text)
time.sleep(10)
browser.back()
time.sleep(3)
browser.close()
Merhaba. Kodlar sonucunda sadece sol taraftaki header spanlarındaki css leri alıyor. anasayfa bilidirimler keşfet vs. alıyor sadece. tweetleri alamıyorum. tweetlerde aynı css e sahip bu arada.
elements = browser.find_elements_by_css_selector(".css-901oao.css-16my406.r-1qd0xha.r-ad9z0x.r-bcqeeo.r-qvutc0")
Bu kod belirtilen sınıfların hepsini içeren elementleri buluyor. Yani aradığınız bir element bu sınıfların birine bile sahip değilse bu fonksiyon tarafından döndürülmeyecektir. Eğer tweetler bu sınıfların hepsini içeriyorsa fonksiyon tarafından döndürülmesi lazım.
Genel olarak kodunuza baktığımda çoğu elementi xpath ile bulduğunuzu görüyorum. Eğer mümkünse elementleri id veya sınıflarına göre , o da olmaz ise parentlerine göre bulmanız uzun vadede daha faydalı olacaktır. Siteye herhangi bir güncelleme geldiğinde sadece bir elementin yeri bile değişse diğer çoğu elementin de xpath değeri değişir. Yani twitter’a bir güncelleme gelir ve site yapısında ufak değişimler yapılırsa kodunuz çalışamayabilir.
Merhabalar,
Daha önce selenium ile tweet çekme üzerine çalışmıştım.
tweets=driver.find_elements_by_tag_name('p')
Bu şekilde tweetleri almaya yeterliydi ama bu şekilde yazıp bırakırsan 10-15 tweet çeker ve durur.
Tam olarak ne istediğini bilmiyorum ama daha çok tweet’e ihtiyacın varsa scroll atmayı deneyip bu işlemi tekrarlayabilirsin.
SCROLL_PAUSE_TIME = 1
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
# break condition
if new_height == last_height:
break
last_height = new_height
a= driver.find_elements_by_xpath('//*[@id="react-root"]/div/div/div/main/div/div/div/div/div/div[2]/div/section/div/div/div/div[25]/div/article/div/div[2]/div[2]/div[3]/span')
for i in a:print(i.text)
İnternet hızına bağlı olarak delay değerini -SCROLL_PAUSE_TIME adlı değişkeni-değiştirebilirsin.
İyi günler.
selenium excel vba için aşağıdaki kodlar doğrumudur.
last_height = twit.ExecuteScript("return document.body.scrollHeight")
Do While True
'Scroll down to bottom
twit.ExecuteScript ("window.scrollTo(0, document.body.scrollHeight)")
twit.Wait 1000
'Calculate new scroll height and compare with last scroll height
new_height = twit.ExecuteScript("return document.body.scrollHeight")
' break condition
If new_height <> last_height Then
Exit Do
End If
Loop