[FIXED] Ich versuche, mich mit Powershell 6 bei Facebook anzumelden

Ausgabe

Ich bin gerade dabei, mich anzumelden, aber ich bekomme im letzten Schritt von Facebook “Ihre Anfrage konnte nicht bearbeitet werden”.

# Setup
#[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$ProgressPreference = 'SilentlyContinue'

# Session
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
$session.Cookies.Add((New-Object System.Net.Cookie("datr", "value", "/", ".facebook.com"))) # Used to set Allow Cookies to Accepted, replace value with your own value form the datr cookie.
$url = 'https://facebook.com/'

# Creds and Form
$login = Invoke-WebRequest -Uri $url -WebSession $session
$form = $login.Forms[0]
$credential = Get-Credential # or Import-CliXml cred.xml
$form.Fields["email"] = $credential.GetNetworkCredential().username
$form.Fields["pass"] = $credential.GetNetworkCredential().password

# Request
$facebook = Invoke-WebRequest -Uri $url -WebSession $session -Method POST -Body $form.Fields
#$facebook.Content

Die Idee: Powershell-Skript ausführen, Creds angeben, es geht zu Facebook, meldet sich an und gibt in der Konsole aus, wie viele Fotos man insgesamt hat.

Lösung

Verwenden Sie Chromium-basierte Browser-DevTools, um den WebRequest-Code für Sie zu generieren

Der bei weitem einfachste Weg, dies zu tun, ist die Verwendung der Entwicklertools von Chrome (oder anderen chrombasierten Browsern). Die Tools generieren den gesamten Code, den Sie benötigen.

  • Gehen Sie zur Facebook-Anmeldeseite
  • Öffnen Sie die DevTools, indem Sie die Taste F12 drücken
  • Öffnen Sie das Netzwerk-Panel
  • Geben Sie Ihre Anmeldeinformationen ein
  • Klicken Sie auf die Schaltfläche “Anmelden”.
  • Suchen Sie die Post-Anforderung in der Liste (sollte ganz oben stehen, wenn Sie gerade DevTools geöffnet haben).
  • Klicken Sie mit der rechten Maustaste auf die Anfrage und wählen Sie Kopieren > Als PowerShell kopieren.
  • Fügen Sie den Code in eine Skriptdatei/VS Code/PowerShell ISE ein.
  • Entfernen Sie “, br” aus "accept-encoding"="gzip, deflate, br" der Header-Hashtabelle oder die Antwort ist NICHT lesbar
  • Sie können die $sessionVariable dann in weiteren Anfragen
    verwenden

    • Diese Anforderungen können auf die gleiche Weise wie die erste im DevTools-Netzwerkbereich generiert werden. Entfernen Sie einfach alle obersten $sessionZeilen, damit Sie die ursprünglichen Sitzungscookies nicht überschreiben (und entfernen Sie das br-Komprimierungsformat erneut aus der Zeile zur Codierung akzeptieren).

Registerkarte "Netzwerk" von Chrome DevTools

Generierter Code sieht in etwa so aus

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
$session.Cookies.Add((New-Object System.Net.Cookie("fr", "0SmzDrtR5y3gEIe773d..BjT69C.eZ.AAA.0.0.BjHE333C.AWTZZ825DfGgk0", "/", ".facebook.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("sb", "Qk8dY1sdf23MH4kHnd1F225Ap2akhXf", "/", ".facebook.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("datr", "TEh3de4TYyf-7e2d36gFVo3wIpseiWg", "/", ".facebook.com")))
$session.Cookies.Add((New-Object System.Net.Cookie("wd", "881x863", "/", ".facebook.com")))
Invoke-WebRequest -UseBasicParsing -Uri "https://www.facebook.com/login/?privacy_mutation_token=eyJ0eXBlIjowLCJjcDFmVhd43324Glvbl90aW1dfslIjoxNjYyODY1MjE4LCJ4WxsD4Ooc2453l0ZV9pZCIDFg36MszgxMjI5MDc5NTsTQ2fQ%3D%3D" `
-Method "POST" `
-WebSession $session `
-Headers @{
"authority"="www.facebook.com"
  "method"="POST"
  "path"="/login/?privacy_mutation_token=eyJ0eXBlIjowLCJjcDFmVhd43324Glvbl90aW1dfslIjoxNjYyODY1MjE4LCJ4WxsD4Ooc2453l0ZV9pZCIDFg36MszgxMjI5MDc5NTsTQ2fQ%3D%3D"
  "scheme"="https"
  "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  "accept-encoding"="gzip, deflate, br"
  "accept-language"="en-US,en;q=0.9"
  "cache-control"="max-age=0"
  "origin"="https://www.facebook.com"
  "referer"="https://www.facebook.com/"
  "sec-ch-ua"="`"Microsoft Edge`";v=`"105`", `" Not;A Brand`";v=`"99`", `"Chromium`";v=`"105`""
  "sec-ch-ua-mobile"="?0"
  "sec-ch-ua-platform"="`"Windows`""
  "sec-fetch-dest"="document"
  "sec-fetch-mode"="navigate"
  "sec-fetch-site"="same-origin"
  "sec-fetch-user"="?1"
  "upgrade-insecure-requests"="1"
} `
-ContentType "application/x-www-form-urlencoded" `
-Body "jazoest=2923&lsd=AVoElEJYWu0&email=test%40gmail.com&login_source=comet_headerless_login&next=&encpass=%23PWD_BROWSER%3A5%3A16D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3EKNpw%3D%3D"

Nach einigem Ausprobieren scheint dies das absolute Minimum zu sein.

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
# Keep from above generated code
$session.Cookies.Add((New-Object System.Net.Cookie('datr', 'TEh3de4TYyf-7e2d36gFVo3wIpseiWg', '/', '.facebook.com'))) 

$body = [ordered]@{
    lsd   = 'AVoElEJYWu0'  # Keep from above generated code
    email = '[email protected]'  # update 
    pass  = 'mypassword123' # update
} 

$params = @{
    OutFile     = 'c:\temp\facebook.html'
    Uri         = 'https://www.facebook.com/login'
    Method      = 'POST'
    Headers     = @{
        'scheme' = 'https'
        'accept' = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
    }
    WebSession  = $session
    ContentType = 'application/x-www-form-urlencoded'
    Body        = $body 
}
$response = Invoke-WebRequest @params -PassThru


Beantwortet von –
Daniel


Antwort geprüft von –
Terry (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like