问题标签 [slimerjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如果我们将它与 PhantomJS 一起使用,在 CasperJS 中滚动不起作用
如果我们在没有 and 的情况下使用 casper--engine=slimerjs
则casper.scrollToBottom();
不起作用casper.page.scrollPosition = {top: scrollHeight, left: 0};
。
我的意思是,如果我们只使用$ casperjs file.js
它就行不通。但有了$ casperjs --engine=slimerjs file.js
它就足够了。
有什么建议吗?也许我应该在命令行中使用一些东西?喜欢--webdriver
?我试过--ssl-protocol=any
了——它也没有帮助。或者也许我应该包含 JS 文件,例如page.includeJs('https://www.my-site.com/thisjsfile.min.js')
PS:我不相信它会有帮助,但这里是代码:
即使我scrollToBottom()
改为:
我还包括了 Anrtjom 的处理错误事件,有一个链接
我有错误:
javascript - 在 node-slimerJS 或为 slimerJS 全局设置 pageContent
我正在尝试使用node-slimerjs 网桥为节点 js设置网络捕获内容。我会使用普通 slimerJS 做的如下:
但我必须使用 node-slimerjs 库中的 getter setter 函数,因此使用这些函数我使用以下代码:
但是 setter 函数没有正确设置值,我留下了空的正文,用于带有 text/* 和 html/* 类型的网络响应。设置 captureContent 后,如果我尝试使用 console.log 读取值,我可以看到只为捕获内容设置了一个空对象:
从节点控制台:
捕获内容::: [ {}, {} ]
我还尝试创建新的正则表达式对象并使用 setter 函数设置它们,但得到了相同的结果。
在SlimerJS 文档中指出,默认情况下这仅限于避免内存问题。所以有可能取消限制......
javascript - 使用 Browserify 为 CasperJS+SlimerJS 捆绑代码?
TLDR;我的问题是:有没有办法让browserify 不require
使用它自己的实现覆盖,而是让它使用不同的方法名称(例如browserifyRequire
)来满足它自己的所有内部需求。要了解我为什么需要这样做,请继续阅读...
情景
我正在尝试使用 CasperJS 编写一些自动化测试并在 SlimerJS 中运行它们——而不是默认的 PhantomJS(尽管据我所知,我会遇到与 PhantomJS 相同的以下问题)。
我真的很想弄清楚如何在 CoffeeScript 中编写这些。事实证明,CasperJS 或 SlimerJS 现在在 CoffeeScript 上表现不佳。文档的建议是在运行 casper 之前编译为 JS。好的...不是超级方便,但我可以处理它。事实上,我还发现require
在这些工具中解析路径的方式并不像在 Node 中那样简单,因此在运行之前进行捆绑也应该对此有所帮助。
但是现在我在尝试运行捆绑代码时遇到了一系列新问题。为此,我正在使用 Browserify。
问题
在我的测试代码中,我需要require('casper')
. CasperJS 世界的标准实践。所以我不得不告诉 browserify 不要捆绑 CasperJS,把"browser": { "casper": false }
我的package.json
. 到目前为止没有问题。但问题来了:
Browserify 覆盖了内置require
函数,提供了它自己的实现require
来完成使 browserify 工作的所有事情。require('casper')
在遇到指令之前,CasperJS 很好。这是 CasperJS 必须做的一次require
,而不是 browserify。那失败了。
不完整的解决方案
我很确定 CasperJS 无法处理 Browserify 覆盖的事实require
,因为 CasperJS 实现了自己的require
ing 方式。为了验证这个假设,我手动编辑了生成的包,将每次出现的 重命名require
为browserifyRequire
- 包括 browserify 的require
. 我唯一require
没有改变的是对 的调用require('casper')
,因为那是我需要 CasperJS 处理require
ing 的一次。事实上,这使事情按预期工作。
问题
同样,有没有办法让 browserify 使用不同的名称作为它自己的内部名称require
?我想我可以在捆绑后编写一个脚本来进行此更改,但我更愿意通过 config.xml 弄清楚如何做到这一点。
另一个问题
也许除了 Browserify 之外,还有另一种在 CasperJS 中捆绑和运行 CoffeeScript 的解决方案?我还没有找到一个......
slimerjs - mocha-phantomjs-core - slimerjs 挂起没有任何错误
使用mocha-phantomjs-core和slimerjs 我设法从 CMD 成功运行我的测试:
Slimerjs 窗口打开,我看到一个浏览器窗口,一切似乎都很好,但 CMD 没有完成(似乎在等待什么)。在我关闭 slimerjs 窗口之前什么都没有发生。我想将测试结果(使用 TAP 报告器)作为文件输出。
那可能吗?
javascript - phantomjs JS重度网站截图
我在 SO 中使用了几乎十几个答案的不同变体和建议,但似乎没有什么能帮助解决我将在下面解释的这个问题。
有一些网站,其中 phantomjs 截图看起来很糟糕,页面加载完成后通过 javascript 加载内容,因此截图看起来缺少内容。我还在项目的 Github 问题页面上发布了一个问题,但答案没有帮助。
https://github.com/ariya/phantomjs/issues/14341
上下文中的站点之一是https://angular.io/
在使用 setTimeout 进行一定延迟后,我尝试在 Page Load Finished 上截屏,还尝试按照此处所述实现 waitFor 方法:使用 phantomjs-node 实现 waitFor 功能
任何比所附网站截图更好的东西都将被接受为答案。要测试我在说什么,可以使用此代码:https ://github.com/crackjack/bulk-shot/
这段代码有效,但如预期的那样只给出了一个部分。如果您进一步增加高度,则屏幕截图效果不佳。
node.js - slimerjs 无法解析所需的模块编码
我见过slimerjs Can not resolve required module, works with phantomjs,但是那个解释绝对没有,所以我敢再问这个问题。
我已经这样做了:
那么,显然,它应该在那里?
现在,我正在尝试这个测试脚本,如https://www.npmjs.com/package/encoding中所述- 我们称之为test_modload.js
:
...我尝试使用以下命令运行它node
:
显然,在这里我必须使用NODE_PATH
:
...并且此命令可以正常通过(即不返回任何内容,并且不打印任何错误)。
但是如果我们尝试这个casperjs
呢?脚本变为:
...如果我运行:
...再次一切都很好(即不返回任何内容,并且不打印任何错误)。
casperjs
但是让我们用slimerjs
引擎试试这个:
呃……我猜NODE_PATH
是失踪了?
该死的,我已经没有选择了。我现在该怎么办,我怎样才能开始encoding
工作slimerjs
?请注意,应该使用https://docs.slimerjs.org/current/api/require.htmlslimerjs
中的文档状态,但是,对于独立的,它会抱怨:require.paths
node
错误:require.paths 被删除。请改用 node_modules 文件夹或 NODE_PATH 环境变量。
... whileslimerjs
不输出此错误;但是,如果我这样做,仍然没有改变require.paths.push('/home/USERNAME/.nvm/versions/node/v4.0.0/lib/node_modules');
- 它仍然“无法解析“编码”模块”。
只是为了确保我有正确的路径,这里有一个清单:
...所以显然模块在那里。
那么,到底如何才能在脚本slimerjs
中找到并使用该模块呢?encoding
slimerjs - Slimer Js 网页评测
它被调用一次,但我的网页是动态变化的。我怎样才能拦截每一个变化?
javascript - 如何正确地将鼠标悬停在 PhantomJS/CasperJS 中的元素上
在我看来,获取动态内容的问题确实非常模糊。我试图找到一些有用的信息,使用了许多不同的代码示例,当然根据我的目的对其进行了修改,但不幸的是,没有任何结果(
我需要从这里获取一些内容。尝试详细解释我面临的问题(需要注意,我所做的一切都是为了我自己的使用!)。
主网站页面具有主导航(Main nav pic)列表,每个列表类“menu__category-trigger”。每个“menu__category-trigger”都有自己的下拉菜单容器。所有这些下拉菜单容器都具有类“menu__categories-dropdowns”的父包装器。当主页加载“menu__categories-dropdowns”为空时,那里没有任何下拉菜单容器。但是,当我将鼠标悬停在任何“menu__category-trigger”上时,所有“menu__categories-dropdowns”都会出现并停留在页面上,直到重新加载。
我需要在 PhantomJS/CasperJS 的帮助下获取这些内容,但我不明白该怎么做。我的代码是:
我的每一步都在代码中注册)
javascript - waitForSelector 中的 casperjs/slimerjs 无效选择器,在 getElementByXPath 中有效?
我有这个 HTML 文件test_xpath.htm
:
在此文件的文件夹中,我将 PHP CLI > 5.4 作为服务器运行,如下所示:
...所以 HTML 页面在http://localhost:8080/test_xpath.htm
.
然后我运行这个 SlimerJS 代码:
如果我按原样运行 JS 代码 - 也就是说,该waitForSelector
部分被禁用if(false)
- 那么一切运行正常。
if(false)
但是,如果我通过更改to 来启用该部分if(true)
,我会得到:
我真的不明白这一点,因为http://docs.casperjs.org/en/latest/modules/casper.html#waitforselector说:
等待直到远程 DOM 中存在与提供的选择器表达式匹配的元素以处理任何下一步
...其中http://docs.casperjs.org/en/latest/selectors.html说:
CasperJS 大量使用选择器来处理 DOM,并且可以透明地使用 CSS3 或 XPath 表达式。
所以,XPath 应该没问题 - 更重要的是,我使用的是完全相同的 XPATH:
...它在那里工作,但它失败了:
为什么会发生这种情况 - 我哪里出错了?如果可能的话,我如何在 中使用这个 XPath waitForSelector
?