Avatar billede spil2vind Nybegynder
20. oktober 2012 - 13:31 Der er 21 kommentarer og
1 løsning

Hente teksten fra alle typer hjemmesider

Jeg har brug for en komponent til at hente oplysninger fra alle typer hjemmesider via brug af f.eks. twebbrowser, jeg kan få det til at virke på simple hjemmesider men ikke på alle sider, jeg har forsøgt med innerHTML, OuterHTML og ExtractOriginalHTML uden held.
Avatar billede claes57 Ekspert
20. oktober 2012 - 15:31 #1
kan det være, at nogle sider frasorterer programmet?
Hvordan præsenterer programmet sig overfor siderne? (User-Agent String skal nok laves, så den planker fx IE 9 100%)
Avatar billede spil2vind Nybegynder
20. oktober 2012 - 18:50 #2
jeg modtager alle data og de bliver pænt vist i twebbrowser, jeg kan dog ikke få fat i teksterne
Avatar billede arne_v Ekspert
20. oktober 2012 - 19:28 #3
Har du proevet med TIdHTTP ?
Avatar billede claes57 Ekspert
20. oktober 2012 - 19:55 #4
find et unikt ord i teksten lige før det du skal bruge, og søg på det - derefter kan du tælle frem efter tags.
Avatar billede spil2vind Nybegynder
20. oktober 2012 - 20:05 #5
ja TIdHttp er prøvet, der bliver jeg for det meste afvist
Avatar billede arne_v Ekspert
20. oktober 2012 - 21:24 #6
Er det ikke bare et spoergsmaal om at sende de rigtige headers?
Avatar billede spil2vind Nybegynder
20. oktober 2012 - 22:31 #7
jo helt sikkert, men det bør dog også være muligt at få fat i teksten, når det er muligt manuelt at markere og kopiere teksten, den kan da ikke være tabt undervejs eller er der noget jeg ikke forstår, Kroning mener at 3-5 linier kode kan løse problemet
Avatar billede arne_v Ekspert
20. oktober 2012 - 22:52 #8
At bruge en embedded web browser for at hente web sider virker lidt overkill paa mig.

Eneste begrundelse jeg kan se er hvis du har brug for at faa koert noget JavaScript paa siden.
Avatar billede spil2vind Nybegynder
20. oktober 2012 - 23:14 #9
Jeg er helt åben for gode ideer, jeg kender kun til TIdHttp og TWebBrowser
Avatar billede spil2vind Nybegynder
20. oktober 2012 - 23:24 #10
og forresten der er java script på flere af de hjemmesider jeg skal bruge løsningen
21. oktober 2012 - 00:20 #11
HEJ,

Er det den samme type oplysning på flere hjemmesider eller er de flere typer oplysninger fra en (ensartet) opbygget hjemmeside ?.

Jeg tænkte nemlig på, at der i Delphi findes en program-rutine, som kan hente en hel WEB-side (HTML-koden) men så må du selv sortere siden i HTML-tags og finde det relevante HTML tag's tekst info.

Og er det samme type (hele vejen igennem) er det relativt simpelt - hvis ikke må der mere kode til.

KRISTIAN
Avatar billede Slettet bruger
21. oktober 2012 - 09:17 #12
Jeg er ikke sikker på jeg har forstået, hvad det er du vil, så se bort fra dette indlæg, hvis jeg rammer helt ved siden af. Men wget kan jo bruges til rigtig mange ting - se bare The Social Netowrk ;-)
http://en.wikipedia.org/wiki/Wget
Den findes både til Windows og *nix
Avatar billede spil2vind Nybegynder
21. oktober 2012 - 09:19 #13
Det er flere typer oplysninger, jeg kender ikke til den program rutine, men vil da gerne høre om den
Avatar billede arne_v Ekspert
21. oktober 2012 - 09:26 #14
Er det noedvendigt at den JS koeres for at du kan se de oplysninger du skal bruge?
21. oktober 2012 - 15:59 #15
Hej,

Jeg har brugt rutinen før men det har været til text-filer og det viser sig at jeg desværre har husket noget forkert. Den tager ikke scripts eller andre ting, ej heller billeder, men kun den rå HTML-kode.  Men den virker perfekt.

Men her er den:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WinInet;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    function  GetInetFile (const fileURL, FileName: String): boolean;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  internetFile,
  localFileName: string;
begin
  // URL (=InternetFile) er sat til en "idiot-adresse " må ændres efter behov

  internetFile := 'http://www.lalala.com/index.php';
  localFileName := 'c:\Myfile.htm';

  if GetInetFile(internetFile, localFileName) then
    ShowMessage('Download successful.')
  else
    ShowMessage('Error in file download.') ;
end;

function TForm1.GetInetFile (const fileURL, FileName: String): boolean;

const  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;

begin
  result := false;
  sAppName := ExtractFileName(Application.ExeName) ;
  hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
  try
      hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0) ;
      try
        AssignFile(f, FileName) ;
        Rewrite(f,1) ;
        repeat
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
            BlockWrite(f, Buffer, BufferLen)
        until BufferLen = 0;
        CloseFile(f) ;
        result := True;
      finally
        InternetCloseHandle(hURL);
      end;
  finally
    InternetCloseHandle(hSession);
  end
end;

END.


Bruger selv TWebbrowser en del og har ikke problemer med at læse HTML-koden, men skal finde Delphi-koden på en gammel harddisk Plug-in enhed.. (og erindrer ikke umiddelbart hvor den er... ).

KRISTIAN
21. oktober 2012 - 16:21 #16
HEJ.

Prøv evt. at se på denne side:

http://www.cryer.co.uk/brian/delphi/index.htm

der kan sikkert være noget som kan hjælpe dig.

KRistian
Avatar billede spil2vind Nybegynder
21. oktober 2012 - 16:52 #17
Har faktisk ikke checket om java scriptet kalder noget load data kode, hvilken betydning har det, er det noget jeg kan undersøge?
Avatar billede spil2vind Nybegynder
21. oktober 2012 - 17:03 #18
snestrup2000 din kode henter ikke de tekster jeg ønsker at hente
21. oktober 2012 - 18:24 #19
HEJ,

HMmmmmm, kan du give et eksmepel på de(n) side(r), du ønsker at downloade ?

Virker koden overhovedet ? (også på andre web-sider) ?

Kristian
Avatar billede spil2vind Nybegynder
21. oktober 2012 - 18:27 #20
Ja din kode virker fint og blev afprøvet på https://danskespil.dk/tips/tips13/spilnu.html og teksten Arsenal findes ikke i filen
21. oktober 2012 - 19:12 #21
Hej,

Startede firefox (min browser) og loggede ind på  https://danskespil.dk/ (...) (dit link).

Fik hele (web)siden downloaded og gemte filen som en lokal HTML-fil.

Åbnede lokalfilen i min foretrukne HTML-edior og søgte efter "ARSENAL" (uden "-erne).  Den fandt dem ikke. Undersøgte så koden fra siden lidt mere minutiøst og opdagede at den del af siden (Arsenal-delen) genereres af et Script og der har "min" kode begrænsninger, som jeg også antydede i begyndelsen.

EN anden ting:

Det du ser på en webside (skærmbillede) er ikke altid det der kommer i HTML-filen.
Der kan forekomme scripts, som danner kode, som kun vises ved RUN-time og ikke som statisk (permanent(fast) /downloaded) kode.

Jeg tror du netop er rendt ind i denne problemstilling.

Kristian
Avatar billede spil2vind Nybegynder
03. april 2013 - 00:23 #22
Lukker spørgsmålet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester