211

PythonでPhantomJSを使いたい。この問題をグーグルで検索しましたが、適切な解決策が見つかりませんでした。

os.popen() 良い選択かもしれません。しかし、いくつかの引数を渡すことができませんでした。

今のところ、使用subprocess.Popen()するのが適切な解決策かもしれません。より良い解決策があるかどうか知りたいです。

Python で PhantomJS を使用する方法はありますか?

4

8 に答える 8

382

Python で PhantomJS を使用する最も簡単な方法は、Selenium を使用することです。最も簡単なインストール方法は、

  1. NodeJSをインストールする
  2. Node のパッケージ マネージャーを使用して、phantomjs をインストールします。npm -g install phantomjs-prebuilt
  3. Seleniumをインストールします(使用している場合はvirtualenvに)

インストール後、ファントムを次のように簡単に使用できます。

from selenium import webdriver

driver = webdriver.PhantomJS() # or add to your PATH
driver.set_window_size(1024, 768) # optional
driver.get('https://google.com/')
driver.save_screenshot('screen.png') # save a screenshot to disk
sbtn = driver.find_element_by_css_selector('button.gbqfba')
sbtn.click()

システム パス環境変数が正しく設定されていない場合は、 への引数として正確なパスを指定する必要がありますwebdriver.PhantomJS()。これを置き換えます:

driver = webdriver.PhantomJS() # or add to your PATH

...次の場合:

driver = webdriver.PhantomJS(executable_path='/usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs')

参考文献:

于 2013-03-29T08:23:16.483 に答える
82

PhantomJS は最近、Python のサポートを完全に終了しました。ただし、PhantomJS にはGhost Driverが組み込まれるようになりました。

それ以来、新しいプロジェクトがその空白を埋めるためにステップアップしました: ghost.py. おそらく代わりにそれを使用したいでしょう:

from ghost import Ghost
ghost = Ghost()

with ghost.start() as session:
    page, extra_resources = ghost.open("http://jeanphi.me")
    assert page.http_status==200 and 'jeanphix' in ghost.content
于 2012-11-08T10:49:59.110 に答える
8

PhantomJSとDjangoを使用してJavaScriptをテストする方法は次のとおりです。

mobile / test_no_js_errors.js

var page = require('webpage').create(),
    system = require('system'),
    url = system.args[1],
    status_code;

page.onError = function (msg, trace) {
    console.log(msg);
    trace.forEach(function(item) {
        console.log('  ', item.file, ':', item.line);
    });
};

page.onResourceReceived = function(resource) {
    if (resource.url == url) {
        status_code = resource.status;
    }
};

page.open(url, function (status) {
    if (status == "fail" || status_code != 200) {
        console.log("Error: " + status_code + " for url: " + url);
        phantom.exit(1);
    }
    phantom.exit(0);
});

mobile / tests.py

import subprocess
from django.test import LiveServerTestCase

class MobileTest(LiveServerTestCase):
    def test_mobile_js(self):
        args = ["phantomjs", "mobile/test_no_js_errors.js", self.live_server_url]
        result = subprocess.check_output(args)
        self.assertEqual(result, "")  # No result means no error

テストを実行します

manage.py test mobile

于 2012-12-18T13:17:44.613 に答える
5

Anaconda を使用している場合は、次のようにインストールします。

conda install PhantomJS

あなたのスクリプトで:

from selenium import webdriver
driver=webdriver.PhantomJS()

完璧に動作します。

于 2016-09-14T17:51:12.527 に答える
2

Buildoutを使用している場合は、Pykler がgp.recipe.nodeレシピを使用して記述するインストール プロセスを簡単に自動化できます。

[nodejs]
recipe = gp.recipe.node
version = 0.10.32
npms = phantomjs
scripts = phantomjs

その部分では、node.js をバイナリとして (少なくとも私のシステムでは) インストールし、npm を使用して PhantomJS をインストールします。最後にbin/phantomjs、PhantomJS Web ドライバーを呼び出すことができるエントリ ポイントを作成します。(Selenium をインストールするには、egg 要件または Buildout 構成で指定する必要があります。)

driver = webdriver.PhantomJS('bin/phantomjs')
于 2014-09-23T14:04:15.507 に答える