标签: phantomjs

17
推荐指数
2
解决办法
5722
查看次数

使用C#运行Phantomjs以获取网页快照

我正在尝试使用phantomjs抓取我自己网站的快照 - 基本上,这是创建用户提交内容的"预览图像".

我在服务器上安装了phantomjs并确认从命令行运行它对适当的页面工作正常.但是,当我尝试从网站上运行它时,它似乎没有做任何事情.我已经确认正在调用代码,幻像实际上正在运行(我监视过程,并且当我调用它时可以看到它出现在进程列表中) - 但是,没有生成图像.

我不知道我应该在哪里找出它为什么不会创建图像 - 任何建议?相关代码块如下:

string arguments = "/c rasterize.js http://www.mysite.com/viewcontent.aspx?id=123";
string imagefilename = @"C:\inetpub\vhosts\mysite.com\httpdocs\Uploads\img123.png";

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = @"C:\phantomjs.exe";
p.StartInfo.Arguments = arguments + " " + imagefilename;

p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

c# asp.net phantomjs

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

phantomjs - 没有为任何XHR/POST/GET AJAX请求发送Cookie

尝试使用PhantomJS登录时,我发现了一个有趣的问题.我不知道为什么它真的发生了.

基本上你启动一个远程调试器,如下所示:

/usr/local/bin/phantomjs --web-security=no --remote-debugger-port=13379 --remote-debugger-autorun=yes /tmp/test.js 
Run Code Online (Sandbox Code Playgroud)

在远程调试器中:

> location.href = "https://www.mysite.com/login"
> $('input[name="username_or_email"]').val('blah@email.com')
> $('input[name="password"]').val('wrongpassword')

> $('button[type="submit"]').submit()
Run Code Online (Sandbox Code Playgroud)

在Chrome中执行此操作会在XHR请求后给我正确的"错误密码"消息,而使用phantomjs会给我一个通用错误,因为没有使用phantomjs发送cookie(我检查了标题).

我很困惑为什么phantomjs不发送带有POST请求的cookie.有谁知道我们怎么能让phantomjs发送带有所有请求的cookie呢?设置cookie文件也没有任何区别.

cookies xmlhttprequest phantomjs

17
推荐指数
1
解决办法
1743
查看次数

如何在继续之前等待click()事件加载到phantomjs中?

Phantomjs有这两个非常方便的回调onLoadStarted,onLoadFinished它允许你在页面加载时基本上暂停执行.但我一直在搜索,如果你click()提交按钮或超链接,我找不到相应的.发生了类似的页面加载,但onLoadStarted我没有调用此事件,因为没有明确的page.open()发生.我正试图找出一种干净的方法来暂停执行此负载.

一个解决方案显然是嵌套的setTimeout,但我想避免这种情况,因为它是hacky并依赖于试验和错误而不是可靠和更强大的东西,如测试某事或等待事件.

我错过了这种页面加载的特定回调吗?或者也许有某种通用的代码模式可以处理这种事情?

编辑:

我还没弄明白如何让它暂停.这是onLoadStarted()我调用click()命令时不调用该函数的代码:

var loadInProgress = false;

page.onLoadStarted = function() {
  loadInProgress = true;
  console.log("load started");
};

page.onLoadFinished = function() {
  loadInProgress = false;
  console.log("load finished");
};

page.open(loginPage.url, function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
        fs.write(filePath + errorState, 1, 'w');
        phantom.exit();
    } else {
        page.evaluate(function (loginPage, credentials) {
            console.log('inside loginPage evaluate function...\n')
            document.querySelector('input[id=' + loginPage.userId + ']').value = credentials.username; …
Run Code Online (Sandbox Code Playgroud)

click pageload phantomjs

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

如何使用PhantomJS下载csv文件

当我使用普通浏览器(Chrome)浏览网站A时,当我点击网站A上的链接时,Chrome会以CSV文件的形式下载报告.

当我检查服务器响应头时,我得到以下结果:

Cache-Control:private,max-age=31536000
Connection:Keep-Alive
Content-Disposition:attachment; filename="report.csv"
Content-Encoding:gzip
Content-Language:de-DE
Content-Type:text/csv; charset=UTF-8
Date:Wed, 22 Jul 2015 12:44:30 GMT
Expires:Thu, 21 Jul 2016 12:44:30 GMT
Keep-Alive:timeout=15, max=75
Pragma:cache
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)

现在,我想使用PhantomJS下载并解析此文件.我设置了page onResourceReceived监听器,看看Phantom是否会接收/下载该文件.

clientRequests.phantomPage.onResourceReceived = function(response) {
    console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};
Run Code Online (Sandbox Code Playgroud)

当我发出Phantom请求下载文件时(这是page.open('文件的URL')),我可以在Phantom日志中看到该文件已下载.这是日志:

"contentType": "text/csv; charset=UTF-8",
    "headers": {
        "name": "Date",
        "value": "Wed, 22 Jul 2015 12:57:41 GMT"
    },
    "name": "Content-Disposition",
    "value": "attachment; filename=\"report.csv\"",
    "status":200,"statusText":"OK"
Run Code Online (Sandbox Code Playgroud)

我收到了文件及其内容,但是如何访问文件数据?当我打印当前的PhantomJS page对象时,我得到了页面A的HTML而我不希望这样,我想要CSV文件,我需要使用JavaScript解析它.

javascript http download phantomjs

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

基于浏览器的客户端抓取

我想知道是否有可能通过用户的IP刮取外部(跨域)页面?

对于购物比较网站,我需要抓一个e-com网站的页面,但是来自服务器的几个请求会让我被禁止,所以我正在寻找方法进行客户端抓取 - 也就是说,请求来自用户的页面IP并发送到服务器进行处理.

javascript php jquery web-scraping phantomjs

17
推荐指数
2
解决办法
9894
查看次数

使用幻像js打印PDF - @page规则不起作用

我们使用幻像JS从网页(内部网站点)打印PDF.我的问题不在于整个样式,而在于@page规则.@page规则中的所有样式均未应用.

你知道这可能是什么吗?

@page {
    size: auto;
    padding: 0 !important;
    margin: 10mm !important;
    page-break-before: avoid;
    border: none !important;
    page-break-after: avoid;
    page-break-inside: avoid;
    overflow: hidden !important;
    box-sizing: border-box !important;

    @top-left-corner {
        content: ""; /* has to be specified! */
        background-color: rgba(42, 201, 80, 0.220);
        border-bottom: solid green;
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript css printing pdf phantomjs

17
推荐指数
1
解决办法
529
查看次数

Casperjs检查一个javascript对象

如何检查casperjs脚本中的对象?

我试过console.log(arguments)但它只打印[object Arguments]或[object Object].

我希望得到类似的结果:{'firstparam':'value'...}

就像在Javascript控制台或Node.js中一样......

也许这是一个Phantomjs的问题,我不确定......

phantomjs casperjs

16
推荐指数
1
解决办法
6909
查看次数

是否可以从node.js运行PhantomJS作为命令行参数

我最近将测试从python运行phantomJS作为命令行参数,我还没有完成它但是已经看到了例子.因为PhantomJS是从命令行运行的,所以这似乎是可能的.PhantomJS吐出的结果将直接变成一个变量.

在我走这条路之前,在node.js中进行这项工作对我来说实际上会更有用,它让我思考,我可以使用节点来运行PhantomJS,因为程序从命令行运行并存储数据结果PhantomJS通常会吐出一个变量吗?

我宁愿不使用phantomjs-node,因为它似乎使用了太多的技巧.

所有这一切的原因是能够在程序采取的另一个动作的同时运行PhantomJS并使用其记录的结果数据用于其他一些东西.

简单地说,你可以在python中运行系统命令行东西,我可以在node.js中做同样的事情吗?

干杯:)

编辑:我理解节点和幻像使用不同的js环境,这很酷,因为我只想将幻像作为自己的进程运行并将所有输出数据捕获到node.js变量中(数据将是一对数组,字符串和浮点.)我不想用幻象"开车",我会制作加载的javascript文件,以达到我想要的效果.我想要的只是幻象输出.:)

node.js phantomjs

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

尝试与Selenium并行自动化,但多个webdriver实例吓坏了

所以我正在尝试创建一个使用Selenium自动化WebDriver在网站上执行任务的java程序.目前,我正在使用它进行工作,以便自动执行烦人的任务,用户必须将文件上传到我们的数据库.我已经成功地制作了一个自动执行此程序的程序,并节省了数小时的手动工作.

现在我想让程序并行运行多个浏览器.我想这样做是为了加快我上传文件的速度,因为大部分时间都在等待页面加载.

我用一个更简单的程序版本对此进行了测试,并通过使用自己的WebDrivers打开了数十到数百个线程,设法将简单任务加速了2-10倍.

问题是,每当我运行超过1个 WebDriver时,整个事情有时会开始随机发生,而在其他时候根本不起作用.我尝试使用'PhantomJSDriver'和最新的'PhantomJS.exe',但有时它会起作用,而且大多数时候它什么都不做.与一个驱动程序运行完美运行的相同程序在并行运行时会发生故障.

我一直试图找到原因,为什么会发生这种情况以及解决这个问题的方法,但我还没有找到任何可以使用的确定方法.

如果可能的话,我如何与Selenium并行进行自动化网页浏览,如果没有,为了做到这一点,我应该在哪里寻找?

parallel-processing selenium webdriver phantomjs

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