2015-09-27 83 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