Я внес некоторые исправления в ваш код ниже. Я не знаю, выполняет ли это в конечном итоге то, что вы намеревались, но то, что он делает, это делает несколько нажатий на страницы, а затем находит все твиты и просматривает их, печатая текст каждого из них. Возможно, вам придется больше подправить код, если он не дает желаемых результатов, но теперь он работает.
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
base_url = u'https://twitter.com/search?q='
query = u'seattlepacificuniversity'
url = base_url + query
browser.get(url)
time.sleep(1)
body = browser.find_element_by_tag_name('body')
for _ in range(100):
body.send_keys(Keys.PAGE_DOWN)
time.sleep(0.2)
tweets = browser.find_elements_by_css_selector("[data-testid=\"tweet\"]")
for tweet in tweets:
print(tweet.text)
Причина, по которой у вас был открыт второй браузер, заключается в том, что у вас был вторая строка ниже:
browser = webdriver.Chrome()
В ответ на ваш вопрос о сборе всех твитов и печати текстов я внес некоторые изменения в код, приведенные ниже.
for _ in range(16):
tweets.extend(browser.find_elements_by_css_selector("[data-testid=\"tweet\"]"))
body.send_keys(Keys.PAGE_DOWN)
time.sleep(1)
tweets = list(dict.fromkeys(tweets)) # removes duplicates
for tweet in tweets:
print(tweet.text)
Поскольку DOM загруженный различным набором твитов с каждой страницей вниз, мне нужно было собирать твиты после каждой страницы вниз и сохранять их в списке. После завершения l oop прокрутки страниц я удалил все дубликаты твитов в списке, а затем прошел через них, чтобы напечатать текст. * Примечание: я изменил ваш для l oop только на go 16 раз, потому что на тот момент, когда я делал это, было максимальное количество страниц, которое было необходимо. В идеале у вас есть время, чтобы l oop сделал это, а затем нашел способ определить, когда вы достигли конца, а затем вырваться из l oop.