Seite 1 von 1

Webscraping Selenium

Verfasst: Donnerstag 10. Dezember 2020, 21:07
von Bebbi
Ich bin wieder einmal hilflos bei der Arbeit. Ich versuche die aufgerufene Seite zuerst vollständig zu laden und danach die entsprechenden Daten abzurufen. Das Ganze sieht bis jetzt wie folgt aus:

Code: Alles auswählen

driver = webdriver.Chrome(path)
driver.get('https://finance.yahoo.com/')
print(driver.title)

search = driver.find_element_by_name('yfin-usr-qry')
search.send_keys('DAI.DE')
time.sleep(2)
search.send_keys(Keys.RETURN)

try:
    myElem = WebDriverWait(webdriver.chrome, delay).until(EC.presence_of_element_located((By.Name, 'yfin-usr-qry')))
    print("Page is ready!")
except TimeoutException:
    print("Loading took too much time!")
    
Leider bekomme ich dabei folgende Fehlermeldung:

Code: Alles auswählen


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-20-707a0a15b1f1> in <module>
      1 try:
----> 2     myElem = WebDriverWait(webdriver.chrome, delay).until(EC.presence_of_element_located((By.Name, 'yfin-usr-qry')))
      3     print("Page is ready!")
      4 except TimeoutException:
      5     print("Loading took too much time!")

NameError: name 'delay' is not defined

Delay ist doch nicht etwas was definiert werden muss sondern als Art Befehl dient, oder irre ich mich da? Was läuft falsch?

Danke

Re: Webscraping Selenium

Verfasst: Donnerstag 10. Dezember 2020, 21:10
von Sirius3
Natürlich muß delay einen Wert haben. Was denkst Du denn, was delay an der Stelle bedeutet?
Variablennamen werden komplett klein geschrieben. Benutze keine Abkürzungen und laß dieses nichtssagende my weg -> element.

Re: Webscraping Selenium

Verfasst: Montag 21. Dezember 2020, 20:39
von Bebbi
Danke für die Antwort. Ich habe nun aber gemerkt, dass es keine weitere Zeit braucht um die Seite zu laden sondern dass sich diese aufbaut, wenn man herunter scrollt. Ich habe deshalb anstelle von:

Code: Alles auswählen

try:
    myElem = WebDriverWait(webdriver.chrome, delay).until(EC.presence_of_element_located((By.Name, 'yfin-usr-qry')))
    print("Page is ready!")
except TimeoutException:
    print("Loading took too much time!")
folgenden Befehl eingefügt:

Code: Alles auswählen

driver.execute_script("window.scrollTo(3,document.body.scrollHeight)")
Das Problem ist nun, dass er einmal scroll und dann nicht mehr weiter. Die Idee wäre hingegen, dass er so lange scrollt bis es nicht mehr möglich ist. Was mache ich falsch?

Re: Webscraping Selenium

Verfasst: Montag 21. Dezember 2020, 20:52
von Bebbi
Habe es auch mit:

Code: Alles auswählen

driver.execute_script("scroll(0, 250);")
probiert, was allerdings auch nicht funktioniert

Re: Webscraping Selenium

Verfasst: Dienstag 22. Dezember 2020, 20:56
von Bebbi
Also ich versuche meine Fragen noch einmal genauer zu beschreiben. Ich möchte, dass wenn mir Python mit Hilfe von Selenium die Seite öffnet, diese bis zum Schluss geladen wird. Dafür habe ich jetzt folgende Befehle Jupyter Notebook erstellt.

Code: Alles auswählen

driver = webdriver.Chrome(path)
driver.get('https://finance.yahoo.com/')
print(driver.title)
Dieser Code funktioniert, da die Seite richtig geladen wird.

Code: Alles auswählen

search = driver.find_element_by_name('yfin-usr-qry')
search.send_keys('DAI.DE')
time.sleep(2)
search.send_keys(Keys.RETURN)
Auch das funktioniert problemlos. Bei der Suche wird nach DAI.DE gesucht und die Resultate werden angezeigt.

Code: Alles auswählen

driver.maximize_window()$
Die Seite wird maximiert, nicht zwingend aber auch das läuft

Code: Alles auswählen

time.sleep(5)
driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
Hier sollte die Seite bis zum Schluss des Dokumentes geladen werden. Dies passiert leider nicht!!! Eine Fehlermeldung wird mir allerdings auch nicht angezeigt, wodurch ich doch ausgehen kann, dass der Befehl in Ordnung ist.....oder etwa nicht?

Weshalb funktioniert das nicht, ich bekommen Vögel....

Re: Webscraping Selenium

Verfasst: Dienstag 22. Dezember 2020, 20:56
von Bebbi
Also ich versuche meine Fragen noch einmal genauer zu beschreiben. Ich möchte, dass wenn mir Python mit Hilfe von Selenium die Seite öffnet, diese bis zum Schluss geladen wird. Dafür habe ich jetzt folgende Befehle Jupyter Notebook erstellt.

Code: Alles auswählen

driver = webdriver.Chrome(path)
driver.get('https://finance.yahoo.com/')
print(driver.title)
Dieser Code funktioniert, da die Seite richtig geladen wird.

Code: Alles auswählen

search = driver.find_element_by_name('yfin-usr-qry')
search.send_keys('DAI.DE')
time.sleep(2)
search.send_keys(Keys.RETURN)
Auch das funktioniert problemlos. Bei der Suche wird nach DAI.DE gesucht und die Resultate werden angezeigt.

Code: Alles auswählen

driver.maximize_window()$
Die Seite wird maximiert, nicht zwingend aber auch das läuft

Code: Alles auswählen

time.sleep(5)
driver.execute_script("window.scrollBy(0,document.body.scrollHeight)")
Hier sollte die Seite bis zum Schluss des Dokumentes geladen werden. Dies passiert leider nicht!!! Eine Fehlermeldung wird mir allerdings auch nicht angezeigt, wodurch ich doch ausgehen kann, dass der Befehl in Ordnung ist.....oder etwa nicht?

Weshalb funktioniert das nicht, ich bekommen Vögel....