如何防止Javascript在Selenium中改变页面?如何下载原始页面源?

时间:2014-08-07 02:35:51

标签: javascript html node.js selenium selenium-webdriver

使用Selenium自动化测试,但自动保存注入内容的AJAX页面,即使他们需要先验证才能访问。

我试过

tl;博士:我尝试了多种使用AJAX下载网站的工具而放弃了,因为它们难以使用或者根本无法工作。我在试用后试图使用Selenium WebHTTrack (其GUI无法在我的Ubuntu计算机上启动+在交互式终端模式下提供身份验证时非常头疼), wget (它没有下载我页面上包含的任何样式表脚本,请参阅我用wget尝试的底部... ...然后我终于在使用Mozilla XULRunner AJAX scraper promising post之后放弃了撬棍只是对我不利。所以......

最终在NodeJS和Selenium-WebdriverJS

中创造了自己的破碎

我的NodeJS脚本使用selenium-webdriver npm module "officially supported by the main project"来执行:

  • 提供登录信息+必要的按钮点击&输入身份验证
  • 下载目标页面上引用的所有JS和CSS
  • 下载目标页面,原始JS / CSS文件链接更改为本地文件路径

现在,当我在本地查看我的测试页时,我看到许多页面元素的两倍,因为目标站点每次加载时都会将HTML片段加载到页面中。我现在用它来下载我的目标页面:

var $;
var getTarget = function () {                                                                                                                                               
    driver.getPageSource().then(function (source) {
        $ = cheerio.load(source.toString());
    }); 
};

var targetHtmlDest = 'test.html';
var writeTarget = function () {
    fs.writeFile(targetHtmlDest, $.html());
}

driver.get(targetSite)
    .then(authenticate)
    .then(getRoot)
    .then(downloadResources)
    .then(writeRoot);
driver.quit();   

问题是我获得的页面源是已修改的页面源,而不是原始页面源。尝试在driver.executeAsyncScript() and driver.executeScript()内运行alert("x");window.stop();不会做任何事情。

1 个答案:

答案 0 :(得分:0)

也许使用Curl获取页面(您可以在命令中传递身份验证)将获得裸源? 否则,您可以在测试浏览器上关闭JavaScript以防止触发JS操作。