2017-01-22 19 views
0

Ich versuche, alle Sprachen von Google Translate zu bekommen. Wenn ich Developer Tools öffnen und eine der Sprache klicken, wenn alle Sprachen aufgetaucht sind (wenn Pfeil geklickt hat), gibt es //*[@id=':7']/div/text() für Arabisch, aber es gibt null zurück, wenn ich versuche, Knoten zu erhalten:xPath ist falsch vom Browser angegeben oder HTMLAgilityPack kann xPath nicht verwenden?

async Task AddLanguages() 
    { 
     try 
     { 
      // //*[@id=":6"]/div/text() 
      HtmlDocument document = new HtmlDocument(); 
      document.LoadHtml(html); 
      for (int i = 6; i <= 9; i++) 
      { 
       //*[@id=":6"]/div/text()   //*[@id=":6"]/div/div 
       Debug.WriteLine(i); 
       var element = document.DocumentNode.SelectSingleNode("//*[@id=':7']/div/text()"); 
       Trace.WriteLine(element == null, "Element is null"); 
      } 
     } 
     catch (Exception e) 
     { 
      this.ShowMessageAsync("Hata!", "Dilleri yüklerken hata ortaya çıktı."); 
     } 
    } 

Element is null: True Ausgänge all (Ich habe versucht, for loop zu verwenden, um Sprachen zu durchlaufen, aber es funktioniert nicht einmal für einzelnes!)

+0

Ich glaube nicht, dass es legal ist, eine ID zu haben, die mit ":" beginnt, so kann ich nicht sehen, wie das funktionieren würde. Haben Sie die URL/HTML, die Sie versuchen zu kratzen? – Stuart

+0

@Stuart Wie gesagt, sein Google Übersetzer, und wenn Sie alle Sprachen aufklappen, und klicken Sie mit der rechten Maustaste arabisch, dann mit der rechten Maustaste -> kopieren -> xPath, gibt es das und es hat einen Punkt. –

Antwort

1

Ich schätze, dein XPath ist falsch. Sie können versuchen, etwas wie:

+0

Ich werde es so schnell wie möglich versuchen. –

+0

Und wissen Sie, warum Xpath falsch ist? –

+0

Die ID (s) dieser Elemente werden dynamisch generiert. Ich glaube, ich denke, wir können ihnen nicht vertrauen. –

0

Da kann ich noch nicht kommentieren ... Haben Sie versucht, zuerst auf das dropdwon zu klicken, bevor Sie nach dem suchen Elemente? Klick auf // * [@ id = 'gt-sl-g'] oder innere div ist würde die Elemente sichtbar .. machen, dass die Arbeit sollte ..

Wie dem auch sei, kann ich nicht $ x Arbeit machen die Konsole in Google Chrome. Ich erhalte momentan einen Uncaught Type Error. Nicht sicher, ob das mit irgendetwas zu tun hat.

Edit: Oh, ich warte ich denke, ich kenne Ihr Problem .. bei genauerer Betrachtung des Elements scheint es, dass das Element (div) ein anderes div vor dem Text hat. also versuche/* [@ id = ': 7']/div/text() [2]

+0

IDropdown Elemente können ausgeblendet sein, aber sie sind noch vorhanden. Ich denke, das ist nicht das Problem. –

+0

Ich weiß, es tut .. aber die Frage ist, hast du es versucht? In Robot Framework, mit der Selenium2Library, glaube ich, dass, wenn Sie dieses Element erhalten, ohne dass es sichtbar ist, würde nichts zurückgeben. Also könnte es hier genauso sein? – becixb

+0

Oh warte, ich denke, ich kenne Ihr Problem. Bei näherer Betrachtung des Elements scheint es, dass das Element (div) ein anderes div vor dem Text hat. Also versuche/* [@ id = ': 7']/div/text() [2] – becixb