2017-08-10 35 views
0

因爲,原因,我試圖通過使用Selenium/PhantomJS的DOM遞歸。它有效,但它很慢,我不知道爲什麼。 Finderlements似乎每次需要約250毫秒。Selenium - PhantomJS - 在DOM遍歷中的Findelements很慢

我試着調零隱含的等待,沒有太多的成功。我也嘗試過使用Xpath而沒有真正的改變。

這是代碼,有什麼建議嗎?

public static void RecurseDomFromTop() 
    { 
     DomRecursor(pjsDriver.FindElement(By.TagName("*"))); 
    } 

    public static void DomRecursor(IWebElement node) 
    { 
     ReadOnlyCollection<IWebElement> iwes = node.FindElements(By.TagName("*")); 

     foreach (IWebElement iwe in iwes) 
     { 
      DomRecursor(iwe); 
     } 

    } 
+2

爲什麼在世界上要查詢每個標籤? –

+0

我想準確地比較兩個doms。 – cymro

回答

1

你用這種方法來比較兩個doms的方法是錯誤的。每當您發出Selenium請求時,都會創建一個HTTP請求,並將其發送給驅動程序,然後將其發送給瀏覽器,然後發回給驅動程序和驅動程序,並返回給您語言綁定。這涉及很多開銷。

相反,您應該使用driver.PageSource並在一次調用中獲得整個HTML響應。之後,您可以使用HTML解析庫,其速度至少比您現在採用的方法快10倍。

看看下面的文章,它使用HtmlAgilityPack用於獲取DOM數據

https://www.codeproject.com/Articles/659019/Scraping-HTML-DOM-elements-using-HtmlAgilityPack-H