Ausgabe
Also habe ich Selenium in Chrome verwendet, um zu einem Social-Media-Profil zu gehen und die Benutzernamen seiner Follower zu kratzen. Die Liste geht jedoch in die Hunderttausende und die Seite lädt nur eine begrenzte Menge. Meine Lösung bestand darin, Selenium anzuweisen, endlos nach unten zu scrollen und Benutzernamen mit ‘driver.find_elements’ zu kratzen, aber nach ein paar hundert Benutzernamen stürzt Chrome bald mit dem Fehlercode “Ran out of memory” ab.
Bin ich überhaupt in der Lage, diese ganze Liste zu bekommen?
Ist Selenium überhaupt das richtige Tool oder sollte ich Scrapy verwenden? Vielleicht beide?
Ich bin ratlos, wie ich von hier aus weiterkomme.
Hier ist mein Code nur für den Fall
from easygui import *
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService;
from webdriver_manager.chrome import ChromeDriverManager;
choice = ccbox("Run the test?","",("Run it","I'm not ready yet"));
if choice == False:
quit()
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()));
time.sleep(60) #this is a wait to give me time to manually log in and go
#to followers list
SCROLL_PAUSE_TIME = 0.5
# Get scroll height
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")
if new_height == last_height:
driver.execute_script("window.scrollTo(0, 1080);")
time.sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
last_height = new_height
Lösung
Ich habe es herausgefunden! Jeder “Follower” hatte also ein Element und endloses Scrollen würde alle diese Elemente im Speicher speichern, bis es an eine Grenze stößt. Ich habe das gelöst, indem ich die Elemente mit Javascript gelöscht habe, nachdem ich eine bestimmte Menge gescrollt habe, spüle und wiederhole, bis ich ganz unten bin 🙂
Beantwortet von – javery1337
Antwort geprüft von – Senaida (FixError Volunteer)