我试着理解如何在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)
我忘记了什么明显的事情?谢谢.
有没有办法在PhantomJS中触发PDF导出功能而不指定扩展名为.pdf的输出文件?我们想stdout用来输出PDF.
我正在尝试编译phantomjs来添加webGL.显然有可能因为:
但是,我不知道该怎么做.我已经查看了所有配置进行编译,我试过没找到任何东西.我应该使用必要的选项单独编译QTWebkit,然后使用此Webkit编译PhantomJS吗?我在Mac OSX Lion上.
得到一些帮助真的很好.
测试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代码,而且每个规范我只能成功访问一次. …
我想在localhost上从PHP执行PhantomJS.
任何机构都可以解释如何从PHP执行PhantomJS以及我应该从phantomjs.org下载什么软件包?
我的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) 当我想获取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.
所以我试图在我的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) 我成功地使用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) 我想假冒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.我应该在哪里改变它?它(平台)是一个带编码的字符串还是动态创建的?