我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但找不到合适的解决办法。
我发现os.popen()可能是一个不错的选择。但是我不能给它传递一些参数。
现在使用subprocess.Popen()可能是一个合适的解决方案。我想知道是否有更好的解决办法。
有办法在Python中使用PhantomJS吗?
我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但找不到合适的解决办法。
我发现os.popen()可能是一个不错的选择。但是我不能给它传递一些参数。
现在使用subprocess.Popen()可能是一个合适的解决方案。我想知道是否有更好的解决办法。
有办法在Python中使用PhantomJS吗?
当前回答
如果使用Anaconda,请安装:
conda install PhantomJS
在你的脚本中:
from selenium import webdriver
driver=webdriver.PhantomJS()
完美的工作。
其他回答
在python中使用PhantomJS最简单的方法是通过Selenium。最简单的安装方法是
安装NodeJS 使用Node的包管理器安装phantomjs: npm -g install phantomjs-prebuilt 安装selenium(在您的virtualenv中,如果您正在使用它)
安装完成后,你可以简单地使用phantom:
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')
引用:
http://selenium-python.readthedocs.io/ 如何在python webdriver中为phantomjs/ghostdriver设置代理? https://dzone.com/articles/python-testing-phantomjs
PhantomJS最近完全放弃了对Python的支持。然而,PhantomJS现在嵌入了幽灵驱动程序。
一个新的项目填补了这一空白: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
下面是我如何使用PhantomJS和Django测试javascript:
移动/ 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);
});
移动/ 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
运行测试:
py测试移动设备
@Pykler的回答很好,但是Node的要求已经过时了。这个回答中的评论给出了一个更简单的答案,我把它放在这里是为了节省别人的时间:
Install PhantomJS As @Vivin-Paliath points out, it's a standalone project, not part of Node. Mac: brew install phantomjs Ubuntu: sudo apt-get install phantomjs etc Set up a virtualenv (if you haven't already): virtualenv mypy # doesn't have to be "mypy". Can be anything. . mypy/bin/activate If your machine has both Python 2 and 3 you may need run virtualenv-3.6 mypy or similar. Install selenium: pip install selenium Try a simple test, like this borrowed from the docs: from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.PhantomJS() driver.get("http://www.python.org") assert "Python" in driver.title elem = driver.find_element_by_name("q") elem.clear() elem.send_keys("pycon") elem.send_keys(Keys.RETURN) assert "No results found." not in driver.page_source driver.close()
如果使用Anaconda,请安装:
conda install PhantomJS
在你的脚本中:
from selenium import webdriver
driver=webdriver.PhantomJS()
完美的工作。