2017-01-22 48 views
0

我試圖從Google翻譯中獲取所有語言。當我打開開發人員工具,然後單擊語言之一,當所有的語言都彈出(當箭頭點擊),它給//*[@id=':7']/div/text()阿拉伯語,但是當我試圖把它返回null節點:xPath是由瀏覽器給出的錯誤還是HTMLAgilityPack無法使用xPath?

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輸出所有時間(我試圖用循環來循環語言,但它甚至不適用於單一的!)

+0

我不認爲這是合法的,有一個ID以「:」開頭,所以我不明白這將如何工作。你有你想要刮的url/html嗎? – Stuart

+0

@Stuart正如我所說,它的谷歌翻譯,如果你彈出所有語言,並右鍵單擊阿拉伯語,然後右鍵單擊 - >複製 - > xPath,它給出了它,它有一個點。 –

回答

1

我想你的xpath是錯誤的。你可以嘗試這樣的:

​​3210
+0

我會盡快嘗試。 –

+0

你知道爲什麼xpath是錯誤的嗎? –

+0

這些元素的id(s)是動態生成的,我相信所以我認爲我們不能相信它們。 –

0

因爲我還不能評論...你有沒有嘗試點擊dropdwon之前尋找元素? 點擊// * [@ ID = 'GT-SL-GMS'],或者它內部的div會使元素可見.. 這應該工作..

反正我不能爲$ X工作在谷歌瀏覽器中的控制檯。我目前收到一個Uncaught Type Error。不知道這是否與任何事情..

編輯:哦等待我想我知道你的問題..因此仔細檢查元素,似乎元素(div)有文本之前的另一個div。所以嘗試/ * [@ id =':7']/div/text()[2]

+0

IDropdown項目可能被隱藏,但它們仍然存在。我認爲那不是問題。 –

+0

我知道它..但問題是你試過嗎?在Robot Framework中,使用Selenium2Library,我相信當你得到這個元素而它不可見時,它將不會返回任何東西。所以這裏可能是同樣的事情? – becixb

+0

哦,等等,我想我知道你的問題。仔細檢查元素,看起來元素(div)在文本前有另一個div。所以嘗試/ * [@ id =':7']/div/text()[2] – becixb