2015-09-27 84 views
2

我在網頁上執行一些操作後正在尋找自動方式來捕獲HTML。元素更改後捕獲HTML

例如,我在下拉菜單中選擇了一些項目,並且HTML已更改,我想捕獲該HTML並轉儲到文件中。結果,我將在我的硬盤上結束許多不同的HTML文件。

我想這可能是通過使用Selenium來實現的,也許有一些其他插件可以讓我以自動方式將文件保存爲HTML。

回答

0

你的意思是源代碼?

爲Python:

driver.page_source 

爲Java:

driver.getPageSource(); 

,你可以在那裏頁改變

+0

買合蘇木,謝謝。如果我直接在瀏覽器中進行更改,這會起作用嗎?我不寫代碼做什麼 - 我想自己做所有的改變,看看HTML是如何改變的。 –

+0

對不起,不清楚,不明白。 「在瀏覽器中直接更改」是什麼意思?怎樣才能不寫代碼? –

+0

對不起,感到困惑。我的意思是我想通過自己單擊不同的控件來在頁面上手動應用頁面更改,但是例如在java代碼中自動捕獲這些HTML更改。 –

1

我想你問的事不會在每一步後運行這些代碼那麼簡單。還有其他的問題(例如this one)詢問同樣的事情,並且沒有任何好的答案。我試着Google搜索幾分鐘來找到一種方法來做到這一點。我認爲更像是一個瀏覽器插件可以爲你做到這一點。

如果我被迫實現代碼使用Selenium我會做類似下面的...

創建啓動瀏覽器並定位到你要跟蹤的網頁的腳本。在用戶定義的時間間隔內,腳本會抓取頁面源並將其與上次捕獲進行比較。如果源不相同,則會對兩頁進行比較並將差異寫入磁盤。我確定有一些可以找到和使用的差異庫。

這種方法的問題...

  1. 如果你所做的定義的時間間隔內太多的變化,你會得到改變的水珠,不能夠區分了哪些改變什麼行動。
  2. 如果您使間隔太小,您可能會遇到perf問題。
  3. 可能最重要的問題是,您將運行多個測試,然後返回並查看差異...但您無法從中瞭解哪些更改與哪些操作相對應除了發生順序之外,不要將兩者聯繫在一起。

什麼可能是很酷的是,如果你可以注入一個按鈕到頁面,點擊時會彈出一個輸入對話框,你可以鍵入一些文本並將其用作即將發生的動作差異的標籤。例如,您單擊按鈕並鍵入「選擇價格」 - 確定。現在您從下拉菜單中選擇價格。下次單擊按鈕時,腳本檢測到按鈕單擊並執行快速差異,並使用「選擇價格」標籤將其寫入磁盤......或類似的東西。

+0

JeffC,感謝您的回覆。我相信你是對的,但我的用例比你描述的要簡單得多。我設法找到答案併發布。非常感謝你的努力。 –

1

我找到了我自己的問題的答案。

  1. 啓動一個硒鉻驅動程序服務器。
  2. 用Selenium客戶端連接到的所有變化可以通過使用下面的代碼示例捕捉:

代碼:

WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), DesiredCapabilities.chrome()); 
     driver.get("http://google.com"); 
    By by = new By.ByTagName("div"); 
    List<WebElement> oldDivs = driver.findElements(by); 

    while(true){ 
     try { 
      List<WebElement> newDivs = driver.findElements(by); 
      if (oldDivs != newDivs) { 
       for (WebElement element : newDivs) { 
        String a = element.getAttribute("a"); 
        String b = element.getAttribute("b"); 

        System.out.println(a + " :" + b); 
       } 
      } 
     }catch (Exception e){ 
      System.err.println(e); 
     } 
    } 
+0

第一次更改後,您的if始終爲真,因爲您從未指定oldDivs = newDivs。你應該在循環中加入某種Thread.sleep(),否則你的循環速度會很快,可能會導致性能問題......不要發佈垃圾郵件控制檯。 – JeffC