JavaScript Foto von Login Webseite Herunterladen

SaculSD

Newbie
Registriert
Jan. 2022
Beiträge
6
Hi, ich bin neu bei Javascript und hatte vor ein Foto von einer Webseite auf der man sich anmelden muss Herunterladen, das einloggen klappt auch schon aber wie lade ich das Foto mit superagemt runter, der Link vom Foto hat nähmlich keine png endung oder ähnliches

Code:
const superagent = require("superagent").agent();

const ytm = async () => {

    let login = await superagent
        .post('Login Link')
        .send({ _username: "name", _password: "passwort", _remember_me: "on" })
        .set("Content-Type", "application/x-www-form-urlencoded");


    let plan = await superagent
        .post('Foto Link');
        console.log(plan);

//ab hier bin ich auf der eingeloggten seite des Fotos

};


ytm();
 
Lösung
SaculSD schrieb:
wie bekomme ich jetzt aus alt "plan" neu "image" das Bild raus weil in Zeile 615 ist ja das foto, müsste man dann theoretisch nicht nur _body in eine jpg datei umwandeln?
Das ist kein jpeg sondern gemäß zurück geliefertem header in png.
Falls ich das richtig sehe, dann nutzt Du node.js. Dann sollte sich in diesem Fall das Bild gemäß
https://nodejs.org/docs/latest/api/fs.html
mit etwas wie
Code:
import { writeFile } from 'fs';
writeFile('bild.png', plan._body, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});
schreiben lassen.
Ohne die Seite bzw. deren Aufbau zu kennen kann dir pauschal kaum geholfen werden. Im Zweifelsfall wird es aber ein getElementByXXX hinauslaufen bei dem man den Dateiheader liest und davon abhängig die Dateiendung selbst setzt. Gegebenenfalls direkt aus dem HTML heraus oder man muss warten, bis das JS der Seite das HTML beim Clienten zusammengebaut hat.

Die Anfrage ist ansonsten so zurückhaltend, dass der Eindruck entsteht es geht um "Schmuddelkram"
 
Bester Trick beim Programmieren: Unbekannte Begriffe immer erstmal in eine Suchmaschine kippen:
https://duckduckgo.com/?q=getelementbyid+javascript&ia=web

Was benötigt wird: Na das Element, welches das Bild enthält.. Wofür alle modernen Browser per Rechtsklick direkt eine Option bieten. An der Stelle lohnt es auch unheimlich sich gleich mal mit den in die Browser integrierten Devtools zu beschäftigen.
 
Okay danke, so wie ich das verstanden habe kommt immer ein Fehler.
Code diesmal mit Webseite:
Code:
const superagent = require("superagent").agent();


const ytm = async () => {
    let dashboard = await superagent
        .post('https://iss-mahlsdorf-berlin.de/iserv/app/login')
        .send({ _username: "name", _password: "passwort", _remember_me: "on" })
        .set("Content-Type", "application/x-www-form-urlencoded");
      
 function imageDownload(ID)  {
            document.getElementById(ID);
        }
   
   
   
        let plan = await superagent
        .post('https://iss-mahlsdorf-berlin.de/iserv/infodisplay/pdf/14/1/0?1643116701');
        imageDownload("0?1643116701");
        console.log(plan);

};

ytm();

ERROR:
document.getElementById(ID);
^

ReferenceError: document is not defined

HTML der Webseite:

Code:
<img style="-webkit-user-select: none;margin: auto;cursor: zoom-in;background-color: hsl(0, 0%, 90%);transition: background-color 300ms;" src="https://iss-mahlsdorf-berlin.de/iserv/infodisplay/pdf/14/1/0?1643116701" width="685" height="970">

Die ID war jetzt der Dateiname weil ich die ID nicht gefunden habe
 
SaculSD schrieb:
let plan = await superagent
.post('Foto Link');
console.log(plan);

//ab hier bin ich auf der eingeloggten seite des Fotos
Wenn ich das richtig verstehe, hast Du danach in "plan" die Webseite als Text/HTML, die der Server nach dem Login geliefert hat?

Wobei ich schon das nicht so ganz verstehe.

Der erste "post" sollte nach der Übergabe von User/PW doch die Seite leifern, welche den Link zum Foto enthält?

Da halt entweder im Text nach dem passenden Link suchen, das (hoffentlich nur exakt einmal existente) Element identifizieren, dann per getElementByXXX im "plan" danach suchen und das Bild herunter laden und speichern.

Soweit die Theorie, wenn das eine sehr automatisierungsfreudige Seite ist, die nach dem Login eine nahezu statische HTML-Seite liefert, welche auch über die Zeit relativ unverändert bleibt.

Wenn man solche Sachen mit den "üblichen" Bildhostern (ohne Login oder mit den dort manchmal üblichen "click here to downlad" Eingangsseiten) versucht, muss man oft genug mind. die auf der Seite enthaltenen Javascripte ausführen, um einen les- und dann auch downloadbaren Link zu erhalten. Und dann bliebe noch zu hoffen, dass superagent sowohl den Referer korrekt setzt wie auch evtl. beim Login erhaltene Cookies automatisch auch beim Download der Bilder wieder mit überträgt.

Dein "document.getElementById" dürfte Dir nur den Inhalt des HTML-Tags aus dem Text liefern, nur eher "zufällig" den Link zum Bild und mit Sicherheit nicht die Datei.

HTML der Webseite:
Ist das die Ausgabe von console.log(plan); oder von was?
 
gymfan schrieb:
Ist das die Ausgabe von console.log(plan); oder von was?

HTML der Webseite war das Element vom Bild auf der Seite

Code:
<ref *2> Response {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  res: <ref *1> IncomingMessage {
    _readableState: ReadableState {
      objectMode: false,
      highWaterMark: 16384,
      buffer: BufferList { head: null, tail: null, length: 0 },
      length: 0,
      pipes: [],
      flowing: true,
      ended: true,
      endEmitted: true,
      reading: false,
      constructed: true,
      sync: false,
      needReadable: false,
      emittedReadable: false,
      readableListening: false,
      resumeScheduled: false,
      errorEmitted: false,
      emitClose: true,
      autoDestroy: true,
      destroyed: true,
      errored: null,
      closed: true,
      closeEmitted: true,
      defaultEncoding: 'utf8',
      awaitDrainWriters: null,
      multiAwaitDrain: false,
      readingMore: false,
      dataEmitted: true,
      decoder: null,
      encoding: null,
      [Symbol(kPaused)]: false
    },
    _events: [Object: null prototype] {
      end: [Array],
      data: [Array],
      error: [Array],
      close: [Function: bound emit]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'iss-mahlsdorf-berlin.de',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'iss-mahlsdorf-berlin.de',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [ClientRequest],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 55,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(kSetNoDelay)]: true,
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    httpVersionMajor: 1,
    httpVersionMinor: 1,
    httpVersion: '1.1',
    complete: true,
    rawHeaders: [
      'Content-Type',
      'image/png',
      'Content-Length',
      '109367',
      'Connection',
      'close',
      'date',
      'Tue, 25 Jan 2022 19:55:36 GMT',
      'server',
      'Apache',
      'set-cookie',
      'PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/iserv; secure; HttpOnly',
      'x-content-security-policy',
      "script-src 'none'",
      'content-security-policy',
      "script-src 'none'",
      'cache-control',
      'must-revalidate, no-cache, no-store, public',
      'last-modified',
      'Tue, 25 Jan 2022 15:32:31 GMT',
      'accept-ranges',
      'none',
      'referrer-policy',
      'no-referrer',
      'x-frame-options',
      'SAMEORIGIN',
      'strict-transport-security',
      'max-age=15768000',
      'x-content-type-options',
      'nosniff',
      'x-xss-protection',
      '1; mode=block'
    ],
    rawTrailers: [],
    aborted: false,
    upgrade: false,
    url: '',
    method: null,
    statusCode: 200,
    statusMessage: 'OK',
    client: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'iss-mahlsdorf-berlin.de',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'iss-mahlsdorf-berlin.de',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [ClientRequest],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 55,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(kSetNoDelay)]: true,
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    _consuming: true,
    _dumped: false,
    req: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'POST /iserv/infodisplay/pdf/14/1/0?1643116701 HTTP/1.1\r\n' +
        'Host: iss-mahlsdorf-berlin.de\r\n' +
        'Accept-Encoding: gzip, deflate\r\n' +
        'Cookie: IServSAT=8suHwFLK9F29RIBlMyhL7u74U25iH9YA; IServSession=xxELyq4MGsnoCzcziVP5pKxcXIVSsm3A; REMEMBERME=Sis2WG5mb2IvcGxPL1o2YnlZTFFVWmE0OUVXSDg5OThxR2ZENzVPdVZNQT06eEk0Z2JxVGQvVTRUeXlqZFFzOE5EL0I3QklmREI1YVR3RmF4ZXpuNXRadz0%3D\r\n' +
        'Connection: close\r\n' +
        'Content-Length: 0\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/iserv/infodisplay/pdf/14/1/0?1643116701',
      _ended: true,
      res: [Circular *1],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'iss-mahlsdorf-berlin.de',
      protocol: 'https:',
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    [Symbol(kCapture)]: false,
    [Symbol(kHeaders)]: {
      'content-type': 'image/png',
      'content-length': '109367',
      connection: 'close',
      date: 'Tue, 25 Jan 2022 19:55:36 GMT',
      server: 'Apache',
      'set-cookie': [Array],
      'x-content-security-policy': "script-src 'none'",
      'content-security-policy': "script-src 'none'",
      'cache-control': 'must-revalidate, no-cache, no-store, public',
      'last-modified': 'Tue, 25 Jan 2022 15:32:31 GMT',
      'accept-ranges': 'none',
      'referrer-policy': 'no-referrer',
      'x-frame-options': 'SAMEORIGIN',
      'strict-transport-security': 'max-age=15768000',
      'x-content-type-options': 'nosniff',
      'x-xss-protection': '1; mode=block'
    },
    [Symbol(kHeadersCount)]: 32,
    [Symbol(kTrailers)]: null,
    [Symbol(kTrailersCount)]: 0,
    [Symbol(RequestTimeout)]: undefined
  },
  request: Request {
    _events: [Object: null prototype] {
      response: [Function: bound ],
      redirect: [Array],
      abort: [Function (anonymous)]
    },
    _eventsCount: 3,
    _maxListeners: undefined,
    _enableHttp2: false,
    _agent: false,
    _formData: null,
    method: 'POST',
    url: 'https://iss-mahlsdorf-berlin.de/iserv/infodisplay/pdf/14/1/0?1643116701',
    _header: {},
    header: {},
    writable: true,
    _redirects: 0,
    _maxRedirects: 5,
    cookies: 'IServSAT=8suHwFLK9F29RIBlMyhL7u74U25iH9YA; IServSession=xxELyq4MGsnoCzcziVP5pKxcXIVSsm3A; REMEMBERME=Sis2WG5mb2IvcGxPL1o2YnlZTFFVWmE0OUVXSDg5OThxR2ZENzVPdVZNQT06eEk0Z2JxVGQvVTRUeXlqZFFzOE5EL0I3QklmREI1YVR3RmF4ZXpuNXRadz0%3D',
    qs: {},
    _query: [],
    qsRaw: [],
    _redirectList: [],
    _streamRequest: false,
    req: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'POST /iserv/infodisplay/pdf/14/1/0?1643116701 HTTP/1.1\r\n' +
        'Host: iss-mahlsdorf-berlin.de\r\n' +
        'Accept-Encoding: gzip, deflate\r\n' +
        'Cookie: IServSAT=8suHwFLK9F29RIBlMyhL7u74U25iH9YA; IServSession=xxELyq4MGsnoCzcziVP5pKxcXIVSsm3A; REMEMBERME=Sis2WG5mb2IvcGxPL1o2YnlZTFFVWmE0OUVXSDg5OThxR2ZENzVPdVZNQT06eEk0Z2JxVGQvVTRUeXlqZFFzOE5EL0I3QklmREI1YVR3RmF4ZXpuNXRadz0%3D\r\n' +
        'Connection: close\r\n' +
        'Content-Length: 0\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/iserv/infodisplay/pdf/14/1/0?1643116701',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'iss-mahlsdorf-berlin.de',
      protocol: 'https:',
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    protocol: 'https:',
    host: 'iss-mahlsdorf-berlin.de',
    _endCalled: true,
    _callback: [Function (anonymous)],
    _fullfilledPromise: Promise { [Circular *2] },
    res: <ref *1> IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 4,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 200,
      statusMessage: 'OK',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [ClientRequest],
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 32,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0,
      [Symbol(RequestTimeout)]: undefined
    },
    _resBuffered: true,
    response: [Circular *2],
    called: true,
    [Symbol(kCapture)]: false
  },
  req: <ref *3> ClientRequest {
    _events: [Object: null prototype] {
      drain: [Function],
      error: [Function (anonymous)],
      prefinish: [Function: requestOnPrefinish]
    },
    _eventsCount: 3,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: true,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'iss-mahlsdorf-berlin.de',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'iss-mahlsdorf-berlin.de',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular *3],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 55,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(kSetNoDelay)]: true,
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    _header: 'POST /iserv/infodisplay/pdf/14/1/0?1643116701 HTTP/1.1\r\n' +
      'Host: iss-mahlsdorf-berlin.de\r\n' +
      'Accept-Encoding: gzip, deflate\r\n' +
      'Cookie: IServSAT=8suHwFLK9F29RIBlMyhL7u74U25iH9YA; IServSession=xxELyq4MGsnoCzcziVP5pKxcXIVSsm3A; REMEMBERME=Sis2WG5mb2IvcGxPL1o2YnlZTFFVWmE0OUVXSDg5OThxR2ZENzVPdVZNQT06eEk0Z2JxVGQvVTRUeXlqZFFzOE5EL0I3QklmREI1YVR3RmF4ZXpuNXRadz0%3D\r\n' +
      'Connection: close\r\n' +
      'Content-Length: 0\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'POST',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    path: '/iserv/infodisplay/pdf/14/1/0?1643116701',
    _ended: true,
    res: <ref *1> IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 4,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 200,
      statusMessage: 'OK',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *3],
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 32,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0,
      [Symbol(RequestTimeout)]: undefined
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'iss-mahlsdorf-berlin.de',
    protocol: 'https:',
    [Symbol(kCapture)]: false,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      host: [Array],
      'accept-encoding': [Array],
      cookie: [Array]
    }
  },
  text: undefined,
  files: undefined,
  buffered: true,
  headers: {
    'content-type': 'image/png',
    'content-length': '109367',
    connection: 'close',
    date: 'Tue, 25 Jan 2022 19:55:36 GMT',
    server: 'Apache',
    'set-cookie': [
      'PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/iserv; secure; HttpOnly'
    ],
    'x-content-security-policy': "script-src 'none'",
    'content-security-policy': "script-src 'none'",
    'cache-control': 'must-revalidate, no-cache, no-store, public',
    'last-modified': 'Tue, 25 Jan 2022 15:32:31 GMT',
    'accept-ranges': 'none',
    'referrer-policy': 'no-referrer',
    'x-frame-options': 'SAMEORIGIN',
    'strict-transport-security': 'max-age=15768000',
    'x-content-type-options': 'nosniff',
    'x-xss-protection': '1; mode=block'
  },
  header: {
    'content-type': 'image/png',
    'content-length': '109367',
    connection: 'close',
    date: 'Tue, 25 Jan 2022 19:55:36 GMT',
    server: 'Apache',
    'set-cookie': [
      'PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/iserv; secure; HttpOnly'
    ],
    'x-content-security-policy': "script-src 'none'",
    'content-security-policy': "script-src 'none'",
    'cache-control': 'must-revalidate, no-cache, no-store, public',
    'last-modified': 'Tue, 25 Jan 2022 15:32:31 GMT',
    'accept-ranges': 'none',
    'referrer-policy': 'no-referrer',
    'x-frame-options': 'SAMEORIGIN',
    'strict-transport-security': 'max-age=15768000',
    'x-content-type-options': 'nosniff',
    'x-xss-protection': '1; mode=block'
  },
  statusCode: 200,
  status: 200,
  statusType: 2,
  info: false,
  ok: true,
  redirect: false,
  clientError: false,
  serverError: false,
  error: false,
  created: false,
  accepted: false,
  noContent: false,
  badRequest: false,
  unauthorized: false,
  notAcceptable: false,
  forbidden: false,
  notFound: false,
  unprocessableEntity: false,
  type: 'image/png',
  links: {},
  setEncoding: [Function: bound ],
  redirects: [],
  _body: <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 04 d8 00 00 06 da 08 02 00 00 00 98 83 5d 09 00 00 09 32 69 43 43 50 64 65 66 61 75 6c 74 5f 72 ... 109317 more bytes>,
  pipe: [Function (anonymous)],
  [Symbol(kCapture)]: false
Ergänzung ()

gymfan schrieb:
Wenn ich das richtig verstehe, hast Du danach in "plan" die Webseite als Text/HTML, die der Server nach dem Login geliefert hat?

Wobei ich schon das nicht so ganz verstehe.

Der erste "post" sollte nach der Übergabe von User/PW doch die Seite leifern, welche den Link zum Foto enthält?

Da halt entweder im Text nach dem passenden Link suchen, das (hoffentlich nur exakt einmal existente) Element identifizieren, dann per getElementByXXX im "plan" danach suchen und das Bild herunter laden und speichern.

Soweit die Theorie, wenn das eine sehr automatisierungsfreudige Seite ist, die nach dem Login eine nahezu statische HTML-Seite liefert, welche auch über die Zeit relativ unverändert bleibt.
also der erste post bringt mich auf die Startseite wo ich dann angemeldet bin und der zweite dann zum Bild
 
welche bilder gibts wohl auf einer login seite? hört sich nach einer captcha umgehung an.
ansonsten statt in document in der response suchen.

du hast hier kein document vorliegen sondern mußt zunächst die response deiner anfrage als DOM Tree parsen. Dann kannst du von dessen Root Element aus mit getElementByXXX suchen.
 
SaculSD schrieb:
also der erste post bringt mich auf die Startseite wo ich dann angemeldet bin und der zweite dann zum Bild
So ganz verstehe ich das immer noch nicht. Normal wäre (für mich)

Code:
dashboard = await superagent
.post('https://iss-mahlsdorf-berlin.de/iserv/app/login')
Loggt Dich ein und liefert Dir in "dashboard" die gesamte HTML-Seite zurück, in welcher u.A. der Link zum Bild enthalten ist.

Dort ist im "dashboard.body" u.A. der Text (Dein Post #5)
"<img style="-webkit-user-select: ......"
enthalten. Da der nicht immer exakt identisch ist, musst Du dort das "img" Tag suchen und daraus den Link (=.src) ermitteln

Das könnte dann ganz grob (und mit Sicherheit so nicht lauffähig) etwas sein wie:
// ermittele alle IMG Tgas im Dokument
img = dashboard._body.getElementsByTagName("img");
// ermittele den src-Link des ersten IMG Tags
link = img[0].src;

Sollte auf der Seite mehr wie ein "img" Tag enthalten sein, so muss man halt das korrekte suchen. Da es in Deinem Beispiel weder eine ID noch sonst etwas gibt, das den Link für mich eindeutig identifiziert, musst Du Dir halt etwas dazu ausdenken. Ist die Seite immer gleich aufgebaut, mag es auch immer das 10te img Tag sein.

Mit dem so ermittelten "link" kommt dann das zweite POST (warum auch immer ein POST, ich hätte hier bei einem IMG-Tag ein GET erwartet")

Code:
let plan = await superagent
.post(<zuvor ermittelter Link>);

und "plan" liefert Dir das in Deinem letzten Posting gezeigte Ergebnis.

Dort steht dann im "header:" (Zeile 573/574) u.U. "type: 'image/png'", und der Body (Zeile 615) ist (vermutlich) das Bild mit insg. 109367 Byte.

Wenn man dort also "plan._body" binär speichert, hat man das Bild auf der Platte.
 
Zuletzt bearbeitet:
Okay, das sollte doch so richtig sein, und img müsste das bild theoretisch drinn sein oder? ich habe mal dashboard in plan geändert weil ja eigentlich in plan das ganze mit den bytes usw steht. trodsdem kommt noch der Fehler:
img = plan._body.getElementsByTagName("img");


TypeError: plan.body.getElementsByTagName is not a function

Code:
const superagent = require("superagent").agent();


const ytm = async () => {
  let dashboard = await superagent
    .post('https://iss-mahlsdorf-berlin.de/iserv/app/login')
    .send({ _username: "name", _password: "passwort", _remember_me: "on" })
    .set("Content-Type", "application/x-www-form-urlencoded");

  let plan = await superagent
    .get('https://iss-mahlsdorf-berlin.de/iserv/infodisplay/pdf/14/1/0?1643116701');
  // ermittele alle IMG Tgas im Dokument
  img = plan._body.getElementsByTagName("img");
  // ermittele den src-Link des ersten IMG Tags
  link = img[0].src;
  console.log(plan);

};

ytm();
 
Zuletzt bearbeitet:
Setze dir in deiner Entwicklungsumgebung ein Breakpoint in Zeile 10 und 13 und schaue dir an welchen Inhalt die Variable "plan" hat. Es wäre ja an der Stelle hilfreich herauszubekommen, ob plan wirklich die Seite enthält, die du abfragen willst. Zudem kannst du dann auch genau sehen, wie "plan" strukturiert ist, um entsprechende Zugriffe zu bauen.
Breakpoints sind handlicher als console.log() :)


Ein ganz anderes Kapitel wäre ja, wieso die Variablen benennst. "plan" ist für sich allein nicht verständlich. Imho
 
Okay Danke, ich habe jetzt nochmal die namen der Variblen usw bearbeitet aber wie bekomme ich jetzt aus alt "plan" neu "image" das Bild raus weil in Zeile 615 ist ja das foto, müsste man dann theoretisch nicht nur _body in eine jpg datei umwandeln?
 
Schau dir halt den Inhalt von "plan" wie beschrieben an. Schau dir dort das Element "body" an. Sieht der Inhalt von Body aus wie ein jpeg bzw. ein Binärblob, der ein jpeg sein könnte?

Solang Wahr: {
Wenn binärblobig: dann speichere den Inhalt das Elements in eine Datei mit gewünschter Endung. break;

Ansonsten: den Inhalt des letzten HTTP-Response anschauen und suchen wo sich ein Verweis auf das eigentliche Bild versteckt. Diesen Verweis extrahieren, ein HTTP-GET auf eben diesen Verweis starten.
}
 
SaculSD schrieb:
wie bekomme ich jetzt aus alt "plan" neu "image" das Bild raus weil in Zeile 615 ist ja das foto, müsste man dann theoretisch nicht nur _body in eine jpg datei umwandeln?
Das ist kein jpeg sondern gemäß zurück geliefertem header in png.
Falls ich das richtig sehe, dann nutzt Du node.js. Dann sollte sich in diesem Fall das Bild gemäß
https://nodejs.org/docs/latest/api/fs.html
mit etwas wie
Code:
import { writeFile } from 'fs';
writeFile('bild.png', plan._body, (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});
schreiben lassen.
 
Zurück
Oben