标签: phantomjs

代理在phantomjs

我试着理解如何在phantomjs中使用代理

phantomjs example.js --proxy ="ip:port"

phantomjs example.js --proxy = ip:port

phantomjs example.js --proxy = ip:port --proxy-type = http

但我只看到我的ip =(

没有任何输出,如果代理ip apriori无效.

example.js:

var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
    console.log(msg);
};
page.onLoadFinished = function(status){
    if (!status){
        console.log('fail');
        phantom.exit();
    }
    page.render("1.png");
    phantom.exit();
};
page.open("http://whoer.net/");
Run Code Online (Sandbox Code Playgroud)

我忘记了什么明显的事情?谢谢.

javascript phantomjs

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

PhantomJS:将PDF导出到stdout

有没有办法在PhantomJS中触发PDF导出功能而不指定扩展名为.pdf的输出文件?我们想stdout用来输出PDF.

pdf pipe file-descriptor io-redirection phantomjs

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

phantomjs用webGL编译

我正在尝试编译phantomjs来添加webGL.显然有可能因为:

但是,我不知道该怎么做.我已经查看了所有配置进行编译,我试过没找到任何东西.我应该使用必要的选项单独编译QTWebkit,然后使用此Webkit编译PhantomJS吗?我在Mac OSX Lion上.

得到一些帮助真的很好.

qt qtwebkit webgl phantomjs

19
推荐指数
1
解决办法
1917
查看次数

为什么Capybara在一次活动后丢弃我的会话?

测试before_filter :authenticate_user!大多数控制器的rails应用程序,我无法让Capybara保留会话.

我让Capybara使用PhantomJS与poltergeist配置.

我使用以下帮助器:

require 'spec_helper'
include Warden::Test::Helpers

module FeatureHelpers
  def login(user = FactoryGirl.create(:default_user))
    login_as user, scope: :user
    user
  end
end
Run Code Online (Sandbox Code Playgroud)

我有以下spec文件:

require 'spec_helper'
include Warden::Test::Helpers

feature 'Leads Data Tasks View' do
  before(:each) do
    @user = login
  end

  after{ Warden.test_reset! }

  context "clicking a task button" do
    scenario "login persists across multuple actions", js: true do
      visit '/tasks'

      page.should have_selector('#parse', count: 1)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我按照这里显示的那样运行测试时,它将通过.但是,如果我调用某个click_link执行AJAX操作的东西,或者我只是尝试执行visit '/tasks'两次,那么should断言将失败,因为我将被重定向到应用程序的登录页面.

我尝试了一些不同的方法,包括设置Capybara :: Session,但我仍然可以获得AJAX请求的401代码,而且每个规范我只能成功访问一次. …

rspec ruby-on-rails capybara phantomjs poltergeist

19
推荐指数
1
解决办法
4466
查看次数

如何从PHP执行PhantomJS

我想在localhost上从PHP执行PhantomJS.

任何机构都可以解释如何从PHP执行PhantomJS以及我应该从phantomjs.org下载什么软件包?

javascript php phantomjs php-phantomjs

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

使用casperjs中的--ignore-ssl-errors = true运行phantomjs

我的https页面有问题.页面完全正常,它存在,但phantomjs告诉我别的东西:'加载资源失败,状态失败'.我读了一段时间,现在我知道它是phantomjs的bug,这个问题的解决方案是:

--ignore-ssl-errors=true
Run Code Online (Sandbox Code Playgroud)

所以我知道解决方案,但不知道如何使用它.我如何将这个传递给casper的phantomjs?我该怎么办?

编辑:

整个代码:

var casper = require('casper').create({
        verbose: true,
        logLevel: 'warning',
        pageSettings: { javascriptEnabled:  true },
        viewportSize: {width: 1024, height: 768}
    });

    var url = 'http://us3.php.net/manual/en/function.explode.php',
        xp = require('casper').selectXPath;

    // ### AKCJE PODSTAWOWE ###
        casper.start(url);

            casper.userAgent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');

            casper.then(function(){this.captureSelector('logi/img1.png', 'body');});

            casper.then(function(){ this.sendKeys(xp('/html/body/nav/div/div/div/form/span/input[2]'),'test18');});

            casper.then(function(){this.captureSelector('logi/img2.png', 'body');})

            casper.thenClick(xp('/html/body/div[3]/div/section/div/div[2]/a[1]'));

            casper.wait(2000);
            casper.then(function(){this.captureSelector('logi/img3.png', 'body');})

            casper.run(function(){ this.exit(); }); 
Run Code Online (Sandbox Code Playgroud)

javascript ssl phantomjs casperjs

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

Python:Selenium与PhantomJS空页源

当我想获取URL页面的来源时,我在Windows7上遇到了Selenium和PhantomJS的问题. browser.page_source仅返回<html><head></head></html>.我以前睡过了,browser.page_source但没有用.

这是我的代码:

from selenium import webdriver
browser = webdriver.PhantomJS('phantomjs-1.9.7-windows\phantomjs.exe')
url = 'myurl'
browser.get(url)
print browser.page_source
Run Code Online (Sandbox Code Playgroud)

在具有相同版本的PhantomJS的Linux上,它可以很好地工作.它也适用于Windows Server 2003.

python selenium phantomjs

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

在新标签Selenium + Python中打开网页

所以我试图在我的WebDriver中的新标签上打开网站.我想这样做,因为使用PhantomJS为每个网站打开一个新的WebDriver需要大约3.5秒,我想要更快的速度......

我正在使用多进程python脚本,我想从每个页面获取一些元素,因此工作流程如下所示:

Open Browser

Loop throught my array
For element in array -> Open website in new tab -> do my business -> close it
Run Code Online (Sandbox Code Playgroud)

但我找不到任何方法来实现这一目标.

这是我正在使用的代码.网站之间需要永远,我需要快速...其他工具是允许的,但我不知道有太多工具可以删除使用JavaScript加载的网站内容(在加载时触发某些事件时创建的div)这是为什么我需要Selenium ... BeautifulSoup不能用于我的一些页面.

#!/usr/bin/env python
import multiprocessing, time, pika, json, traceback, logging, sys, os, itertools, urllib, urllib2, cStringIO, mysql.connector, shutil, hashlib, socket, urllib2, re
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from PIL import Image
from os import listdir
from os.path import isfile, join
from bs4 import BeautifulSoup
from pprint import pprint

def …
Run Code Online (Sandbox Code Playgroud)

python selenium webdriver phantomjs

19
推荐指数
10
解决办法
9万
查看次数

使用Python中的PhantomJS向下滚动到无限页面的底部

我成功地使用Selenium和PhantomJS来重新加载动态加载的无限滚动页面,如下例所示.但是如何修改它以便不是手动设置一些重载,程序在达到最低点时停止了?

reloads = 100000 #set the number of times to reload
pause = 0 #initial time interval between reloads
driver = webdriver.PhantomJS()

# Load Twitter page and click to view all results
driver.get(url)
driver.find_element_by_link_text("All").click()

# Keep reloading and pausing to reach the bottom
for _ in range(reloads):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(pause)

text_file.write(driver.page_source.encode("utf-8"))
text_file.close()
Run Code Online (Sandbox Code Playgroud)

python phantomjs selenium-webdriver

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

假导航属性

我想假冒CasperJS(/ PhantomJS)的Navigator平台属性.我找到了在页面加载时覆盖Navigator对象的简单解决方案,这在Web上的许多其他地方都是建议的:

    casper.on('page.initialized', function(){
    this.evaluate(function(){
        (function(oldNav){
            var newNav = {};
            [].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){
                 if (prop === 'platform') {
                    Object.defineProperty(newNav, prop, {
                        value: 'Win64'
                    }); }else {
                    Object.defineProperty(newNav, prop, {
                        get: function(){
                            return oldNav[prop];
                        }
                    });
                }
            });
            window.navigator = newNav;
        })(window.navigator);
    });
});
Run Code Online (Sandbox Code Playgroud)

但问题是,如果我们从Iframe获取Navigator属性,则值仍然是原始值,因为page.initialized仅将其设置为主页面.所以我选择在源代码中更改它并再次构建它.我从git repo下载了Phantomjs,我搜索了一个硬编码的平台值(对于我的情况,Linux x86_64).我找到了硬编码的字符串./phantomjs/src/qt/qtwebkit/Source/WebCore/platform/qt/UserAgentQt.cpp

我把它改成了我想要作为navigator.platform返回的字符串,但它没有影响navigator.platform.我应该在哪里改变它?它(平台)是一个带编码的字符串还是动态创建的?

javascript overwrite navigator phantomjs casperjs

19
推荐指数
1
解决办法
1029
查看次数