我需要编写一些访问某些网站的脚本。来自命令行的脚本将获取一些页面、发布一些表单、屏幕抓取一些信息等。
它不能真正做到一库“浏览器”之类的libwww-perl的,因为某些步骤可能需要用户交互(CAPTCHA系统,阿贾克斯-only形式,任何交互惊喜,等)。
我能想到的最实用的方法是在 Firefox 中远程打开一个选项卡,并将 JavaScript 代码注入其中,有点像Greasemonkey和Selenium所做的。它不一定要用于 Firefox,如果更容易,可以是不同的浏览器。
那么最好的方法是什么?
有没有办法只选择最里面的表?那些不包含任何更多表的内容?
我知道我可以过滤element.getElementsByTagName("table").length == 0,我只是想知道是否有更优雅的解决方案.
我有时需要在其他浏览器中调试JS,如果他们都有Firebug会非常好 - 失败了,他们最接近的是什么?
我有几GB的字符串,对于每个前缀,我想找到10个最常见的后缀.那有一个有效的算法吗?
一个明显的解决方案是:
<string, count>对列表.count在这个范围内找到10个最高s.我不确定这实际上是否真的有效.有没有更好的方式我被忽视?
答案必须是实时的,但它可以根据需要进行尽可能多的预处理.
我有基于Perl的程序IO::Async,它有时会在几小时/几天后退出,而不会打印任何错误消息.有没有什么dmesg或/var/log两种.STDOUT/ STDERR都是autoflush(1)这样,数据不应该在缓冲区中丢失.它实际上并没有退出IO::Async::Loop->loop_forever- 打印我放在那里只是为了确保永远不会被触发.
现在一种方法是继续使用越来越多的打印方式来编写程序,并希望其中一个给我一些线索.是否有更好的方法来获取信息,使程序退出/静默崩溃?
它曾经是这样,带有doctypes的文档得到了标准模式,没有doctypes的文档得到了怪癖模式.但似乎现在有一些几乎标准的模式,不同的浏览器遵循不同的规则等.
什么是用于HTML的最佳doctype?有没有理由不使用最简单的<!DOCTYPE html>?无论如何,大多数文件都不遵循任何特定的DTD.
我有一个Ruby程序,大约需要4分钟才能完成任务,我想把它降到1分钟以下.
我尝试了宝石中的ruby-prof,但是它使运行时间增加到约30分钟,甚至看起来都没有特别好地保持单调性(一些变化可靠地提高了性能 - 使用剖析器并且可靠地降低了性能 - 没有剖析器).此任务也无法真正分解为可以独立进行有意义分析的部分.
目前以最低开销分析Ruby代码的最佳方法是什么?
我使用OSX,但如果由于任何原因,探测器需要另一个操作系统,我可能会重新启动.
编辑:perftools.rb具有更低的开销,但结果看起来相当可疑诚实,超出任何合理的抽样错误 - 至少它必须搞乱GC或i/o缓冲或类似的东西,导致很多愚蠢的错误归因.它仍然击败了ruby-prof.
我会保持问题公开,万一有人知道比这更好的事情.
我正在尝试打印一些解析树,并且Data::Dumper非常冗长,例如打印:
{
'A' => {
'ID' => 'y'
},
'OP' => '=',
'B' => {
'NUM' => '5'
}
},
Run Code Online (Sandbox Code Playgroud)
而不是让我们说:
{
'A' => {'ID' => 'y'},
'OP' => '=',
'B' => {'NUM' => '5'}
},
Run Code Online (Sandbox Code Playgroud)
而且它很难阅读,因为它占用了大量的线条.
是否有任何Perl库可以执行Data::Dumper除了更简洁之外的操作,还是需要编写自己的?
Python具有非常优雅的语法,可以针对多种模式检查值.
2 in [1,2,4] #=> True
6 in [1,2,4] #=> False
Run Code Online (Sandbox Code Playgroud)
Ruby版本的订单感觉不对:
[1,2,4].include?(2)
Run Code Online (Sandbox Code Playgroud)
我明白这include?比OO更有意义2.included_in?([1,2,4]),我仍然不喜欢它.Ruby甚至有in关键字,但它似乎只用于构造for i in [1,2,4],而不是用于成员资格测试.
另一种方式是这样的:
(case 2 when 1,2,4 then true end)
Run Code Online (Sandbox Code Playgroud)
相当冗长,但允许模式测试:
(case file_name when "README", /\.txt\z/ then true end)
Run Code Online (Sandbox Code Playgroud)
仍然不是很可读.
我偶然错过了一些非常漂亮的方式吗?
所以我可以这样做:
program
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
echo "foo" | program
Run Code Online (Sandbox Code Playgroud)
但是如果我想输入foo然后将输入交给用户,我该怎么做?
我尝试的第一件事是:
cat <(echo "foo") /dev/fd/0 | program
Run Code Online (Sandbox Code Playgroud)
哪种工作,但随后program看到它的标准输入处于非终端模式(即使有终端连接,间接),所以不能正常工作。
是否有任何标准的 Unix 解决方案?或者一些 bash/ruby/任何设置它的脚本?