标签: phantomjs

无头浏览器和抓取 - 解决方案

我正在尝试为浏览器自动测试套件和能够抓取的无头浏览器平台列出可能的解决方案列表.


浏览器测试/清除:

  • Selenium - 浏览器自动化中的多语言旗舰,Python,Ruby,JavaScript,C#,Haskell等的绑定,用于Firefox的IDE(作为扩展),用于更快的测试部署.可以充当服务器并具有大量功能.

JAVASCRIPT

  • PhantomJS - JavaScript,带有屏幕捕获和自动化的无头测试,使用Webkit.从版本1.8开始,实现了Selenium的WebDriver API,因此您可以使用任何WebDriver绑定,并且测试将与Selenium兼容
  • SlimerJS - 与PhantomJS类似,使用Gecko(Firefox)代替WebKit
  • CasperJS - 基于PhantomJS和SlimerJS构建的JavaScript具有额外的功能
  • Ghost驱动程序 - 用于PhantomJSWebDriver Wire协议的JavaScript实现.
  • 新的 PhantomCSS - CSS回归测试.CasperJS模块,用于使用PhantomJS和 Resemble.js自动进行可视化回归测试.
  • WebdriverCSS -插件为 Webdriver.io自动化视觉回归测试
  • 新的 PhantomFlow - 通过测试描述和可视化用户流.Web用户界面测试的实验方法.
  • new trifleJS - 将PhantomJS API移植到使用Internet Explorer引擎.
  • 新的 CasperJS IDE (商业)

Node.js的

  • Node-phantom - 填补了PhantomJSnode.js之间的空白
  • WebDriverJs - Selenium团队对node.js的Selenium WebDriver绑定
  • WD.js - WebDriver/Selenium 2的节点模块
  • yiewd - …

selenium scrapy web-scraping phantomjs casperjs

362
推荐指数
3
解决办法
7万
查看次数

有没有办法在Python中使用PhantomJS?

我想在Python中使用PhantomJS.我搜索了这个问题,但找不到合适的解决方案.

我发现os.popen() 可能是个不错的选择.但我无法传递一些论据.

使用subprocess.Popen()可能是目前适当的解决方案.我想知道是否有更好的解决方案.

有没有办法在Python中使用PhantomJS?

python phantomjs

202
推荐指数
7
解决办法
17万
查看次数

如何在Ubuntu上设置和运行PhantomJS?

我设置了PhantomJS并将其录制到视频:https://www.dailymotion.com/video/xnizmh_1_webcam

构建说明:http://phantomjs.org/build.html

我的设置有什么问题吗?

在我设置之后,我阅读了快速入门教程并尝试编写此代码

phantomjs hello.js 
Run Code Online (Sandbox Code Playgroud)

它给了我"命令未找到"错误.我怎么解决这个问题?

linux installation ubuntu phantomjs

161
推荐指数
7
解决办法
14万
查看次数

如何使用PhantomJS提交表格

我正在尝试使用phantomJS(这是一个很棒的工具btw!)为我有登录凭据的页面提交表单,然后将目标页面的内容输出到stdout.我能够使用幻像访问表单并成功设置其值,但我不太确定提交表单和输出后续页面内容的正确语法.到目前为止我所拥有的是:

var page = new WebPage();
var url = phantom.args[0];

page.open(url, function (status) {

  if (status !== 'success') {
      console.log('Unable to access network');
  } else {

    console.log(page.evaluate(function () {

      var arr = document.getElementsByClassName("login-form");
      var i;

      for (i=0; i < arr.length; i++) {

        if (arr[i].getAttribute('method') == "POST") {
          arr[i].elements["email"].value="mylogin@somedomain.com";
          arr[i].elements["password"].value="mypassword";

          // This part doesn't seem to work. It returns the content
          // of the current page, not the content of the page after 
          // the submit has been executed. Am I …
Run Code Online (Sandbox Code Playgroud)

javascript forms post phantomjs

161
推荐指数
4
解决办法
12万
查看次数

Casperjs/PhantomJs vs Selenium

我们正在使用Selenium来自动化我们的UI测试.最近我们看到大多数用户使用Chrome.所以我们想知道 - 使用PhantomJS和Selenium的利弊:

  • 在性能方面是否有任何真正的优势,例如执行测试用例所需的时间?
  • 什么时候应该更喜欢PhantomJS而不是Selenium?

user-interface selenium automation google-chrome phantomjs

148
推荐指数
3
解决办法
6万
查看次数

如何使SPA SEO可抓取?

我一直在研究如何根据谷歌的指示谷歌可以抓取SPA .尽管有很多一般性的解释,但我找不到更详尽的逐步教程和实际示例.完成此操作后,我想分享我的解决方案,以便其他人也可以使用它,并可能进一步改进它.
我使用MVCWebapi控制器和Phantomjs在服务器端,并迪朗达尔与客户端push-state启用; 我还使用Breezejs进行客户端 - 服务器数据交互,我强烈推荐所有这些,但我会尝试给出一个足够的解释,也可以帮助人们使用其他平台.

ajax seo phantomjs single-page-application durandal

142
推荐指数
2
解决办法
3万
查看次数

phantomjs不等待"完整"页面加载

我正在使用PhantomJS v1.4.1来加载一些网页.我没有访问他们的服务器端,我只是获得指向他们的链接.我正在使用Phantom的过时版本,因为我需要在该网页上支持Adobe Flash.

问题是许多网站正在加载他们的次要内容异步,这就是为什么Phantom的onLoadFinished回调(HTML中的onLoad的模拟)在没有任何东西仍然加载时过早发生的原因.任何人都可以建议我如何等待网页的完整加载,例如,包含广告等所有动态内容的屏幕截图?

javascript events phantomjs

136
推荐指数
8
解决办法
14万
查看次数

PhantomJS无法打开HTTPS站点

我正在使用以下基于loadspeed.js示例的代码打开一个https://站点,该站点也需要http服务器身份验证.

var page = require('webpage').create(), system = require('system'), t, address;

page.settings.userName = 'myusername';
page.settings.password = 'mypassword';

if (system.args.length === 1) {
    console.log('Usage: scrape.js <some URL>');
    phantom.exit();
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            t = Date.now() - t;
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));
            console.log('Loading time ' + t + ' msec');
        }
        phantom.exit();
    });
} …
Run Code Online (Sandbox Code Playgroud)

https screen-scraping phantomjs

103
推荐指数
5
解决办法
7万
查看次数

PhantomJS; 单击一个元素

如何单击PhantomJS中的元素?

page.evaluate(function() {
    document.getElementById('idButtonSpan').click();  
});
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误"未定义不是一个函数......"

如果我改为

 return document.getElementById('idButtonSpan');
Run Code Online (Sandbox Code Playgroud)

然后打印出来,

然后它打印[object object],因此元素确实存在.

该元素充当按钮,但它实际上只是一个span元素,而不是提交输入.

我能够点击这个按钮点击Casper,但Casper有其他限制,所以我回到了PhantomJS.

javascript click phantomjs

80
推荐指数
6
解决办法
8万
查看次数

如何管理PhantomJS实例的"池"

我正在计划内部使用的webservice,它接受一个参数,一个URL,并返回表示该URL中已解析 DOM的html .通过解决,我的意思是webservice将首先获取该URL的页面,然后使用PhantomJS"渲染"页面,然后在执行所有DHTML,AJAX调用等之后返回结果源.但是发动对每个请求的基础(这是我现在做)幽灵的方式过于缓慢.我宁愿拥有一个PhantomJS实例池,其中一个实例可用于为我的webservice提供最新的调用.

以前有没有做过这方面的工作?我宁愿将这个web服务基于其他人的工作,而不是从头开始为我自己编写一个池管理器/ http代理服务器.

更多上下文:我列出了迄今为止我见过的两个类似的项目,以及为什么我避免了每个项目,这导致了关于管理PhantomJS实例池的问题.

jsdom - 从我所看到它在页面上执行脚本具有很强的功能,但它不会尝试复制浏览器行为,因此如果我将它用作通用的"DOM解析器",那么它最终会成为很多额外的编码来处理各种边缘情况,事件调用等.我看到的第一个例子是必须为我使用node设置的测试应用程序手动调用body标签的onload()函数.这似乎是一个深深的兔子洞的开始.

Selenium - 它只有很多移动部件,因此设置一个池来管理长期存在的浏览器实例将比使用PhantomJS更复杂.我不需要它的任何宏录制/脚本功能.我只想要一个能够获得网页并解析它的DOM的web服务,就好像我用浏览器浏览到那个URL一样(如果我可以让它忽略图像等,甚至更快)

node.js web-scraping jsdom phantomjs

66
推荐指数
4
解决办法
2万
查看次数