Alle Cookies einer Webseite auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Chuky
User
Beiträge: 4
Registriert: Samstag 6. Juli 2019, 14:18

Hey Leute,

ich versuche alle Cookies (first und third party) einer beliebigen Webseite aus zu lesen.
Mein erster Ansatz war mit selenium und dem chromedriver eine komplette Seite zu durchlaufen (also alle Links rekursiv zu verfolgen) und hinterher die Cookie-Datenbank von Google Chrome aus zu lesen. Da selenium von sich aus keine third party Cookies auslesen kann, hielt ich das für die sinnvollste Idee. Erstmal hat das auch funktioniert, nur bei manchen Webseiten ist aus irgendeinem Grund die Datenbank leer, obwohl in Google Chrome die Cookies angezeigt werden. Wenn ich nach beenden des Browsers die Cookie sqlite3 Datenbank per Datenbankbrowser öffne, sind manchmal die Cookies in der Datenbank aber manchmal auch nicht.

Hier ein Beispielcode:

Code: Alles auswählen

from selenium import webdriver
import os, shutil, sqlite3


browser_list_place = 0
browser_list = []
profiles_folder = "profiles"


def getcookies(url):
    if os.path.isdir(profiles_folder):
        shutil.rmtree(profiles_folder)

    co = webdriver.ChromeOptions()
    co.add_argument("--no-sandbox")
    co.add_argument("--user-data-dir=" + profiles_folder + "/" + str(browser_list_place))

    browser_list.append(webdriver.Chrome('D:\crawler\chromedriver.exe', options=co))
    browser_list[browser_list_place].set_page_load_timeout(30)

    browser_list[browser_list_place].get(url)

    #browser_list[browser_list_place].quit()

    for folder in range(0, browser_list_place + 1):
        con = sqlite3.connect(profiles_folder + "/" + str(folder) + "/Default/Cookies")
        cur = con.cursor()
        cur.execute("SELECT * FROM cookies")
        rows = cur.fetchall()
        for row in rows:
            print(row)


getcookies('https://developer.mozilla.org/de/')
Ich rufe ich als Beispiel die Mozilla Entwickler-Seite auf. Google Chrome selbst erkennt hier 7 Cookies bzw. bei meiner jetzigen Browsersession nur 4. Erstmal noch eine Zwischenfrage: Warum ist hier manchmal eine unterschiedliche Anzahl an Cookies vorhanden?
Hier auch nochmal ein Screenshot:
Bild


Meine zwei Hauptfragen sind nun:
1. Warum ist die Datenbank manchmal leer und manchmal nicht? Was mache ich falsch?
2. Gibt es evtl. einen effizienteren und/oder einfacheren Weg alle Cookies (first und third party) ohne selenium aus zu lesen?

Danke schon mal für eure Hilfe!
Chuky
User
Beiträge: 4
Registriert: Samstag 6. Juli 2019, 14:18

Kann niemand helfen? :/

Ich weiß mittlerweile das es wegen JavaScript wohl keine andere Möglichkeit als Selenium gibt. Das löst aber leider noch nicht mein Problem mit der leeren Datenbank. Hätte da vielleicht jemand eine Idee?
__deets__
User
Beiträge: 14538
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das hat ja eher was mit Chrome und weniger was mit Python zu tun. Bestenfalls noch mit Selenium und der Art, wie es die Browser als Driver aufruft (AFAIK versucht der ja, da "saubere" Instanzen zu erzeugen). Also wuerde ich mal bei den beiden Projekten schauen, angefangen mit Selenium. Und deren Foren/ML/Bugtracker bemuehen.
Antworten