Почему Selenium не очищает все данные при прокрутке? - PullRequest
0 голосов
/ 29 мая 2020

Я уверен, что ответ прост, но меня действительно бросает через oop. Я пытаюсь очистить раздел ответов Twitter.com, поскольку он бесконечно прокручивается. Используя Selenium и bs4, я могу очистить только несколько имен пользователей. Количество зависит от запуска, но обычно варьируется от 7 до 10 имен пользователей. Похоже, что он только очищает имя пользователя в самом низу страницы, и я хотел бы очистить их все, и мне это сложно. Любая помощь приветствуется!

import requests, time
from bs4 import BeautifulSoup
from selenium import webdriver
from lxml import html


url = ("https://twitter.com/realDonaldTrump/status/1265827032707072000")
driver = webdriver.Chrome('INSERTDRIVERHERE')

def scroll_to_bottom(driver):

    old_position = 0
    new_position = None

    while new_position != old_position:
        # Get old scroll position
        old_position = driver.execute_script(
                ("return (window.pageYOffset !== undefined) ?"
                 " window.pageYOffset : (document.documentElement ||"
                 " document.body.parentNode || document.body);"))
        # Sleep and Scroll
        time.sleep(1)
        driver.execute_script((
                "var scrollingElement = (document.scrollingElement ||"
                " document.body);scrollingElement.scrollTop ="
                " scrollingElement.scrollHeight;"))
        # Get new position
        new_position = driver.execute_script(
                ("return (window.pageYOffset !== undefined) ?"
                 " window.pageYOffset : (document.documentElement ||"
                 " document.body.parentNode || document.body);"))



driver.get(url)
scroll_to_bottom(driver)

html = driver.page_source
soup = BeautifulSoup(html, features='lxml')
usernameSoup = soup.find_all("div", class_="css-901oao css-bfa6kz r-111h2gw r-18u37iz r-1qd0xha r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-qvutc0")

# Quits browser
driver.quit()

# Grabs text of css code
list_of_usernames = [x.text for x in usernameSoup]

# Lists all the usernames in a string
text = ', '.join(list_of_usernames)

# Prints list to see how many usernames are being scraped for comparison 
print(text)
print(len(list_of_usernames))

Я пробовал вставить больше операторов сна, чтобы убедиться, что вся страница загружается до того, как html будет проанализирован, но мне все равно не повезло.

...