我正在使用HtmlUnit与通过Ajax与服务器交互的网页进行交互.在Ajax代码启动后不久,HtmlUnit会生成以下两条日志消息:
WARNING: Ignoring XMLHttpRequest.setRequestHeader for Content-length: it is a restricted header Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxFunction_setRequestHeader WARNING: Ignoring XMLHttpRequest.setRequestHeader for Connection: it is a restricted header Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status
......接着是这个消息,重复了六次:
SEVERE: XMLHttpRequest.status was retrieved before the response was available. Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status
我无法弄清楚如何关闭这些消息.浏览代码表明它们是通过直接调用记录器产生的,而不是通过我可以提供无操作实现的处理程序对象产生的,正如我已经为CSS错误所做的那样.该的HtmlUnit登录页面中显示,添加此代码应工作:
System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
Run Code Online (Sandbox Code Playgroud)
......但它没有效果.我还尝试在调用java时添加以下选项:
-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
Run Code Online (Sandbox Code Playgroud)
......但这也没有效果.
我想我可以在执行此代码时将stderr重定向到/ dev/null,但是可用的hacky解决方案是什么?
有时我会在Perl 6 REPL上开始编写方法调用链,例如:
".".IO.dir.grep(...).map(...).
Run Code Online (Sandbox Code Playgroud)
...然后我意识到我要对最终列表进行的操作是将每个元素打印在自己的行上。我希望序列具有某种each
方法,因此我可以使用结束链.each(*.say)
,但是没有找到这样的方法。取而代之的是,我必须返回到该行的开头并前置.say for
。感觉好像打乱了我的思想。
这是一个小麻烦,但是却让我感到震惊,我不知道我是否缺少一些简单的选择。我唯一想到的是».say
and .join("\n").say
,但是前者可以对元素进行无序操作(如果我理解正确的话),而后者可以构造一个字符串,该字符串可能会很大,具体取决于输入列表。
我对dd命令很熟悉,但我很少需要自己使用它.今天我需要,但我遇到的行为似乎很奇怪.
我想创建一个100M的文本文件,每行包含单个单词"testing".这是我的第一次尝试:
~$ perl -e 'print "testing\n" while 1' | dd of=X bs=1M count=100
0+100 records in
0+100 records out
561152 bytes (561 kB) copied, 0.00416429 s, 135 MB/s
Run Code Online (Sandbox Code Playgroud)
嗯,这很奇怪.其他组合怎么样?
~$ perl -e 'print "testing\n" while 1' | dd of=X bs=100K count=1K
0+1024 records in
0+1024 records out
4268032 bytes (4.3 MB) copied, 0.0353145 s, 121 MB/s
~$ perl -e 'print "testing\n" while 1' | dd of=X bs=10K count=10K
86+10154 records in
86+10154 records out
42524672 bytes (43 MB) copied, …
Run Code Online (Sandbox Code Playgroud) 我在一周前将这个问题发布到PhantomJS邮件列表中,但没有得到回应.希望在这里有更好的运气......
我一直在尝试使用PhantomJS从YouTube上获取信息,但却无法使其正常运行.
考虑通过iframe元素嵌入到网页中的YouTube视频.如果将src属性引用的URL直接加载到浏览器中,则会获得视频的整页版本,其中视频封装在embed元素中.初始页面内容中不存在嵌入元素; 相反,页面上的一些脚本标记导致一些Javascript被评估,最终将嵌入元素添加到DOM.我想能够在它出现时访问这个embed元素,但是当我在PhantomJS中加载页面时它永远不会出现.
这是我正在使用的代码:
var page = require("webpage").create();
page.settings.userAgent = "Mozilla/5.0 (X11; rv:24.0) Gecko/20130909 Firefox/24.0";
page.open("https://www.youtube.com/embed/dQw4w9WgXcQ", function (status) {
if (status !== "success") {
console.log("Failed to load page");
phantom.exit();
} else {
setTimeout(function () {
var size = page.evaluate(function () {
return document.getElementsByTagName("EMBED").length;
});
console.log(size);
phantom.exit();
}, 15000);
}
});
Run Code Online (Sandbox Code Playgroud)
无论我设置多长时间,我都只会在控制台上看到"0".如果我查找"DIV"元素,我得到"3",如果我查找"SCRIPT"元素,我得到"5",所以代码似乎是合理的.我从来没有找到任何"EMBED"标签,即使我在浏览器中加载上面的URL,我也会在页面加载后立即找到一个.
有谁知道问题可能是什么?在此先感谢您的帮助.
今天我注意到序列'A' ... 'AA'
只包含一个元素:
> 'A' ... 'AA'
(A)
Run Code Online (Sandbox Code Playgroud)
我认为它将包含27:字母加上决赛AA
.
如果我明确提供了一个生成器,它会:
> 'A', *.succ ... 'AA'
(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA)
Run Code Online (Sandbox Code Playgroud)
文档说默认生成器是*.succ
或者*.pred
取决于端点的比较方式.但:
> 'A' cmp 'AA'
Less
Run Code Online (Sandbox Code Playgroud)
所以看来我应该*.succ
默认获得生成器.我绝对没有得到*.pred
发电机:
> 'A', *.pred ... 'AA'
Decrement out of range
in whatevercode at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
在Perl 6中,对逗号运算符进行三角形缩减会生成一个列表列表,每个列表都会从输入列表中添加一个连续的元素:
> [\,] 1..5
((1) (1 2) (1 2 3) (1 2 3 4) (1 2 3 4 5))
Run Code Online (Sandbox Code Playgroud)
挺棒的!但最近我想知道它是如何运作的.
如果op
是任意运算符,[op] @list
则应该是相同的@list[0] op @list[1] op ... op @list[*-1]
.据我所知,它[\op]
应该是所有中间值的列表.但似乎应该意味着[\op] @list
应该评估(@list[0], @list[0] op @list[1], @list[0] op @list[1] op @list[2], ...)
.在我原来的情况op
是,
,输出列表的第一个元素应该就做@list[0]
,但它不是; 这是一个单身人士名单(@list[0],)
.
原始三角形缩减如何知道使其输出的第一个元素成为单例列表?
如果我编写自己的列表构建例程,它就像我期望的那样工作:
> sub foo { |$^a, $^b }
sub foo ($a, $b) { #`(Sub|93971926296448) ... }
> [[&foo]] 1..5 …
Run Code Online (Sandbox Code Playgroud) 我对数学如何使用未定义的值感到困惑。我的Perl 5直觉告诉我,这些值在大多数情况下等于零,例如:
> my $x
(Any)
> $x += 5
5
Run Code Online (Sandbox Code Playgroud)
如预期的那样。
> my $x
(Any)
> $x *= 3
3
Run Code Online (Sandbox Code Playgroud)
等一下 现在好像未定义的值被解释为1
。
我知道Perl6对于某些运算符具有一些identity元素的概念:
> [*] ()
1
Run Code Online (Sandbox Code Playgroud)
也许乘以一个未定义的值与此有关...?
究竟如何运作?
我想向子进程的标准输入流发送一个字符串,就像我在 Perl 5 中所做的那样:
pipe *READ, *WRITE;
if (my $pid = fork()) {
close READ;
print WRITE "Hello world!\n";
close WRITE;
} else {
close WRITE;
open STDIN, '<&=' . fileno READ;
close READ;
exec 'cat';
}
Run Code Online (Sandbox Code Playgroud)
Raku 中的等效结构是什么?
我可以将任何输入发送到外部cat
进程,以将其返回到可以传递给另一个进程的流中,但这太糟糕了。
我发现这个Raku 模块似乎很相关,但它有“输入和输出”作为 TODO,所以它现在对我没有帮助。
这个网站上也有这个问题,与这个问题密切相关。该作者要求提供一种不依赖外部流程的解决方案,就像我一样,但公认的解决方案仍然使用外部流程。
最后,我注意到Raku课程的文档IO::Pipe
,它似乎应该符合要求。但是,该页面说:
Pipes can be easily constructed with sub run and Proc::Async.new.
Run Code Online (Sandbox Code Playgroud)
...我明确想避免。我尝试只创建一个新IO::Pipe
对象,希望我可以以自然的方式使用它in
和out
流,但我得到:
> my $pipe = IO::Pipe.new
Required named parameter 'on-close' …
Run Code Online (Sandbox Code Playgroud) 假设我使用REPL上的三角形缩小定义了一个惰性无限数组,并在前面粘贴了一个元素:
> my @s = 0, |[\+] (1, 2 ... *)
[...]
Run Code Online (Sandbox Code Playgroud)
我可以打印出前几个元素:
> @s[^10]
(0 1 3 6 10 15 21 28 36 45)
Run Code Online (Sandbox Code Playgroud)
我想将减少内部的零元素移动到这样:
> my @s = [\+] (0, |(1, 2 ... *))
Run Code Online (Sandbox Code Playgroud)
然而,作为对此的回应,REPL挂起,大概是通过尝试评估无限列表.
如果我在单独的步骤中执行它,它的工作原理:
> my @s = 0, |(1, 2 ... *)
[...]
> ([\+] @s)[^10]
(0 1 3 6 10 15 21 28 36 45)
Run Code Online (Sandbox Code Playgroud)
为什么不这样做不起作用......工作?
我一直在尝试编写一个执行以下逻辑的Perl 6表达式:计算子表达式并返回其值,但如果这样做会导致引发异常,请捕获异常并返回固定值.
例如,假设我想要分割两个数字,并且-1
如果发生错误,则将表达式求值为.在Ruby中我可能会写:
quotient = begin; a / b; rescue; -1; end
Run Code Online (Sandbox Code Playgroud)
在Emacs Lisp中可能写成:
(setq quotient (condition-case nil (/ a b) (error -1))
Run Code Online (Sandbox Code Playgroud)
我的第一次Perl 6尝试是这样的:
sub might-throw($a, $b) { die "Zero" if $b == 0; $a / $b }
my $quotient = do { might-throw($a, $b); CATCH { default { -1 } } };
Run Code Online (Sandbox Code Playgroud)
但$quotient
无论是否$b
为零,这里最终都是未定义的.
似乎CATCH
忽略了返回的值,或者至少在描述异常如何工作的doc页面上,所有CATCH
主体仅执行具有副作用的事情,例如日志记录.
该页面提到try
了另一种选择.我可以写一些例子:
my $quotient = try { might-throw($a, $b) } // …
Run Code Online (Sandbox Code Playgroud)