- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为 casperjs 定义了以下设置
var casper = require('casper').create({
waitTimeout: 50000,
stepTimeout: 50000,
verbose: true,
viewportSize: {
width: 1400,
height: 768
},
pageSettings: {
"userAgent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36',
"loadImages": false,
"loadPlugins": false,
"webSecurityEnabled": false,
"ignoreSslErrors": true
},
onStepTimeout: function() {
this.echo("Step timed out ");
var step = casper.getStepNumber();
casper.gotoStep(step+1);
}
});
我在 casperjs 模块中添加了这些函数:
Casper.prototype.getStepNumber = function getStepNumber() {
"use strict";
return this.step;
};
Casper.prototype.gotoStep = function gotoStep(stepNum) {
"use strict";
var steps = this.steps,
last = steps.length;
this.checkStarted();
this.clear();
this.step = Math.min(stepNum,last);
return this;
};
我在数组“urlArray”中有一个 url 列表。我将一一打开所有这些网址,如下所示:
casper.start().each(urlArray, function(self, url) {
casper.thenOpen(url, function() {
this.echo("INFO:"+"\t"+url+"\t"+"Opened."+"\n");
});
});
打开 url 后,我正在资源中查找特定字符串,一旦到达那里,我只是将该特定 url 打印到 stdout 并中止当前请求,如下所示
casper.on('resource.requested', function(resource,request) {
var url = resource.url;
if(url.indexOf("some string") !== -1) {
this.echo("url: "+url);
request.abort();
}
});
问题:Casper 在到达我正在查找的资源 url 之前会转到下一页(从 urlArray),并且在某些情况下我会收到“stepTimeout”。如何限制 casper 等待我正在查找的资源 url,而不获取 stepTimeOut(假设我将有 60 秒作为 stepTimeOut)并且不跳过当前 url。
当前输出是:
INFO: url1 Opened.INFO: url2 Opened.INFO: url3 Opened.prints the resource url that I am looking for.INFO: url4 pened.INFO: url5 Opened.INFO: url6 Opened.INFO: url7 Opened.INFO: url8 Opened.prints the resource url that I am looking for.INFO: url9 Opened.INFO: url10 Opened.
注意:
我正在抓取的所有url都包含我正在搜索的资源url。
最佳答案
全部wait*
和then*
函数是 CasperJS 中的步骤。所以stepTimeout
在所有这些中都使用了 waitTimeout
仅用于wait*
功能。
Type: Number
Default: null
Max step timeout in milliseconds; when set, every defined step function will have to execute before this timeout value has been reached. You can define the onStepTimeout() callback to catch such a case. By default, the script will die() with an error message.
上述文档告诉您需要了解的一切。要么你不设置stepTimeout
或者您覆盖处理程序 casper.options.onStepTimeout
到一些不die()
的东西.
您遇到此问题的原因可能是因为 thenOpen
步骤必然会打开页面。如果不成功,则一段时间后会达到超时,因此脚本会终止。
其他注意事项:
您说您想要等到请求特定资源,但您不想实际加载它。看来你不是在谈论页面,而是页面中的一些资源(js、css、img、ajax 调用等)。您应该将事件处理程序从 page.resource.requested
更改为至resource.requested
.
当你这样做的时候,改变 url.indexOf("some string")
至url.indexOf("some string") !== -1
否则无法匹配url的协议(protocol)。
如果该资源确实存在于您加载的每个页面上,那么您可以
casper.start().each(urlArray, function(self, url) {
casper.thenOpen(url, function() {
this.echo("INFO:"+"\t"+url+"\t"+"Opened."+"\n");
}).waitForResource(function test(resource){
return resource.url.indexOf("some string") !== -1;
}, function then(){
this.echo("INFO: resource loaded");
});
});
但是你不能 abort
事件处理程序中的请求,因为那样它可能不起作用。
关于javascript - CasperJS中的waitTimeout和stepTimeout有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26522737/
运行测试时获取。 FAIL 35 tests executed in 16.806s, 35 passed, 0 failed, 2 dubious, 0 skipped. “可疑”意味着什么?如何查
是否有人已经使用 casperjs 实现了著名的“页面对象模式”,从长远来看,它对于测试的可维护性非常有用? 当您必须将测试的机制和目的分开时,使用它非常非常酷。以这种方式编写测试会变得更加愉快。 有
所以,我试图在我的服务器上运行 casperJS 作为 cron 作业,这是 crontab: * * * * * /usr/local/bin/casperjs /var/www/javascrip
我知道如何禁用图像和插件,但似乎没有明显的选项来禁用 CasperJS 中的 css。 有谁知道这是如何工作的? 最佳答案 假设您想抑制所有外部样式表的加载,您可以通过中止加载 css 文件的请求来实
我在删除网站时从创建的 URL 下载文件时遇到问题。目前我发现了一个文件的月份和年份,然后替换了 url 中的值并尝试从该位置下载。我了解到您无法使用评估范围内的下载功能。 this.evaluate
在 CasperJS 中,如何在使用 casper.thenOpen() 时保持 session 例如: var casper = require('casper').create(); casper
我希望我的 casper 在 session 期间登录并保持登录状态。有可能吗?如果是这样,如何? 最佳答案 如果你想在 CasperJS 中存储 cookie,你可以使用 PhantomJS coo
我用 casperjs 编写了一些测试。他们与 phantomjs 一起运行得很好。但是,当我尝试通过以下命令使用 slimerjs 时: casperjs --verbose --engine=sl
我用 casperjs 编写了一些测试。他们与 phantomjs 一起运行得很好。但是,当我尝试通过以下命令使用 slimerjs 时: casperjs --verbose --engine=sl
我想单击“提交”按钮,等待下一页加载,然后在第二页上获取html。。我先做然后再运行,但然后一步仍在首页上运行。有任何想法吗? var casper = require('casper').creat
在我的页面自动化脚本中,当我单击标签链接时,将打开一个新窗口。链接的 url 是由复杂的 javascript 生成的。 办理任务 触发后 url 变为: https://oa.phicomm.co
CasperJS(带有 phantomJS)可以直接在浏览器中运行而不是通过命令行运行吗? 我想从浏览器运行交互式测试,我从用户那里获取输入并相应地进行。我想将 casperJS 作为在浏览器中执行的
我正在尝试使用 CasperJS 将图像上传到网络表单。 我的表格看起来像这样: ... Campaign Banner
错误: casper.test property is only available using the `casperjs test` command 在我的整个代码库中搜索了“casper.tes
假设我有一组网址。我不想使用 thenOpen 函数。因为它等待每个以前的 url 被加载并且它减少了加载时间。 casper.each(hrefs,function(self,href){
我正在尝试导航到从脚本本身创建的 url。 此示例代码不像(我曾)预期的那样工作。不知道为什么:( var casper = require('casper').create({ viewpo
我有一个链接列表,我必须模拟这些链接才能使用CasperJS进行点击。他们都共享同一个类(class)。 但是,使用this.click('.click-me')仅单击第一个链接。 单击所有链接的正确
casper.then(function(){ phone_number = '7wqeqwe6'; phone_password = 'Teqweqweqw34'; }); casper.t
我如何告诉 casper 不要加载图像、css、js 视频等。所以我只对 DOM 元素感兴趣。 最佳答案 看看 CasperJS API . var casper = require('casper'
在Phantom中生成PDF时,我可以这样设置纸张大小: page.paperSize = { height: '8.5in', width: '11in', orientation: '
我是一名优秀的程序员,十分优秀!