标签: phantomjs

Phantomjs - 获取网页的屏幕截图

我有一个URL(例如http://www.example.com/OtterBox-77-24444-Commuter-Series-Optimus/dp/B00A21KPEI/ref=pd_sim_cps_4),想要截取它并在我的网页上预览它.意思是,用户点击预览按钮,PhantomJS需要以PNG/JPEG格式预览网页

我也可以使用任何其他开源.

javascript jquery frontend phantomjs

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

如何使用PhantomJS渲染页面的一部分?

我想使用Phantom.JS将各个HTML元素渲染到PNG中.有谁知道这是否可能?另外,我如何使用Phantom.js呈现用户已经在查看的页面?

javascript phantomjs

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

将变量传递给page.evaluate - PhantomJS

是否可以在页面中传递变量.在我的情况下,我的情况如下?

function myFunction(webpage, arg1, arg2){

var page = require('webpage').create();

page.viewportSize = { width: 1920, height: 1080 };

page.open(webpage, function (status){

    if (status == 'success') {

            page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js", function(){

                page.evaluate(function(){

                    arg = arg1 + arg2;
                    console.log(arg);

                });

            });

    } 

    else { phantom.exit(); }

});

}
Run Code Online (Sandbox Code Playgroud)

我尝试了在互联网上找到的几种方法,但实际上没有什么可以得到它的变量.

预先感谢您的帮助 :)

phantomjs

22
推荐指数
1
解决办法
2万
查看次数

如何使用node.js抓取包含动态内容的页面?

我试图刮一个网站,但我没有得到一些元素,因为这些元素是动态创建的.

我在node.js中使用cheerio,我的代码在下面.

var request = require('request');
var cheerio = require('cheerio');
var url = "http://www.bdtong.co.kr/index.php?c_category=C02";

request(url, function (err, res, html) {
    var $ = cheerio.load(html);
    $('.listMain > li').each(function () {
        console.log($(this).find('a').attr('href'));
    });
});
Run Code Online (Sandbox Code Playgroud)

此代码返回空响应,因为页面加载时<ul id="store_list" class="listMain">为空.

内容尚未附加.

如何使用node.js获取这些元素?如何使用动态内容抓取页面?

javascript web-crawler node.js phantomjs

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

如何在客户端重定向发生后才结束PhantomJS脚本

我正在努力将PhantomJS无头浏览器集成到我的项目中(目前使用的是1.6版本).在大多数情况下,它在完成我需要完成的工作方面做得很好.但是,WebPage.open()调用的方式的异步性质,以及在某些时候调用phantom.exit()的需要,使得当您无法预测它们的去向时,处理客户端重定向变得棘手去.

我所追求的只是在任何元刷新(导致不同的页面)之后调用phantom.exit()的方法,并且JavaScript重定向与诸如onload事件之类的事情相关联.我明白为什么这是一个问题,因为在理论上一个客户端重定向可以在页面加载后发生的任何秒数,我不能简单地要求的能力退出,只有当没有更多的重定向发生.现在,我能想到的最好的解决方案是:a)手动检测页面上元刷新元素的存在并自己处理,b)使用setInterval()来节省一些时间(例如,1-在调用phantom.exit()之前经过1.5秒).基本上看起来像这样:

var page = require('webpage').create();
var visitComplete = false;
var url = "http://some.url";
var pageOpenedTime;
setInterval(function() {
    if (visitcomplete && typeof pageOpenedTime != 'undefined' &&
        new Date() - pageOpenedTime >= 1500)
    {
        phantom.exit();
    }
), 1000);
page.open(url, function() {
    pageOpenedTime = new Date();
    if (!hasMetaRefresh(page)) {
        visitComplete = true;
    }
});

function hasMetaRefresh(page) {
    // Query the DOM here to detect meta refresh elements
}
Run Code Online (Sandbox Code Playgroud)

有更好的想法吗?

编辑:我应该提一下,我的第一个想法是,当执行与初始页面加载相关联的JavaScript时,可能会有一个PhantomJS事件被触发,但onLoadFinished回调似乎先于任何页内JavaScript的执行,包括onload事件.我还做了一些关于我可能需要等待多少时间间隔的测试,虽然1000 ms足够长时间以便在一个小的测试页面中执行JavaScript重定向(通过body onload事件),但100 ms还不够长.

phantomjs

21
推荐指数
2
解决办法
6825
查看次数

Python + Selenium + PhantomJS渲染为PDF

PhantomJS's当PhantomJS与Selenium和Python结合使用时,是否可以使用渲染到PDF功能?(即page.render('file.pdf')通过Selenium 模仿Python内部的行为).

我意识到这种用途GhostDriver,并GhostDriver没有真正支持打印的方式.

如果另一种替代品可能不是Selenium,我全都耳朵.

python selenium phantomjs

21
推荐指数
2
解决办法
1万
查看次数

PyCharm无法连接到GhostDriver

当我运行它时,我有一个单元测试正在通过python manage.py test,但是当我从PyCharm中运行它时失败了.

def test_alpha(self):
    from selenium.webdriver.common.utils import free_port
    from selenium import webdriver

    driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=free_port())
    driver.quit()
Run Code Online (Sandbox Code Playgroud)

从PyCharm运行时遇到的异常是

WebDriverException: Message: 'Can not connect to GhostDriver' 
Run Code Online (Sandbox Code Playgroud)

我花了相当多的时间来研究这个问题,我注意到当我手动指定一个端口时,测试在PyCharm中传递.

# suppose 50000 happens to be a free port on your computer
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, port=50000)
Run Code Online (Sandbox Code Playgroud)

快速回顾一下:

  • 测试通过 python manage.py test
  • 如果手动指定端口,则测试在PyCharm中传递
  • 如果,PyCharm中的测试失败 port=free_port()

PyCharm做的是让测试无法连接到Ghostdriver?


# For convenience, the `free_port()` code snippet is here
# selenium.webdriver.common.utils.freeport

def free_port():
    free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    free_socket.bind(('127.0.0.1', 0))
    free_socket.listen(5)
    port = free_socket.getsockname()[1]
    free_socket.close()
    return port 
Run Code Online (Sandbox Code Playgroud)

python unit-testing pycharm phantomjs selenium-webdriver

21
推荐指数
1
解决办法
1960
查看次数

无法安装phantomjs - 这是一个bitbucket问题?

phantomjs无法安装.错误是否表明bitbucket有问题?

$ sudo npm install -g phantomjs
...
> phantomjs@1.9.7-6 install /usr/lib/node_modules/phantomjs
> node install.js

Looks like an `npm install -g`; unable to check for already installed version.
Downloading http://cdn.bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2
Saving to /usr/lib/node_modules/phantomjs/phantomjs/phantomjs-1.9.7-linux-x86_64.tar.bz2
Receiving...
Error requesting archive.
Status: 403
Request options: {
  "protocol": "http:",
  "slashes": true,
  "auth": null,
  "host": "cdn.bitbucket.org",
  "port": null,
  "hostname": "cdn.bitbucket.org",
  "hash": null,
  "search": null,
  "query": null,
  "pathname": "/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2",
  "path": "/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2",
  "href": "http://cdn.bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2"
}
Response headers: {
  "content-type": "application/xml",
  "transfer-encoding": "chunked",
  "connection": "keep-alive",
  "date": "Fri, 23 May …
Run Code Online (Sandbox Code Playgroud)

node.js npm phantomjs

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

获取CasperJS或PhantomJS中的资源内容

我看到CasperJS有一个"下载"功能和一个"on resource received"回调,但我没有在回调中看到资源的内容,我不想将资源下载到文件系统.

我想获取资源的内容,以便我可以在我的脚本中使用它.这可能与CasperJS或PhantomJS有关吗?

phantomjs casperjs

20
推荐指数
3
解决办法
1万
查看次数

Phantom JS同步AJAX请求:NETWORK_ERR:XMLHttpRequest异常101

我正在进行同步ajax调用(ajax设置async:false).这很好用.

现在我正试图在phantomJS中为此编写一个自动测试,我收到了这个错误

NETWORK_ERR: XMLHttpRequest Exception 101 
Run Code Online (Sandbox Code Playgroud)

我检查了我的服务日志,似乎服务没有得到任何请求.

javascript ajax xmlhttprequest phantomjs

20
推荐指数
1
解决办法
1万
查看次数