我有一个selenium测试,我试图在我的ubuntu服务器上无头地运行.它使用pyvirtualdisplay和xephyr.虽然脚本在我的本地系统中运行良好,但是当我在服务器中运行它时它会挂起.我试图清除内存并重新启动服务器.但没有运气.脚本看起来像这样:
from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1366, 768))
display.start()
driver = webdriver.Firefox()
driver.set_window_size(1366, 768)
driver.get ("http://www.google.com/")
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
selenium headless headless-browser python-2.7 pyvirtualdisplay
我一直在寻找在osx中进行无头测试的解决方案.但我需要能够保存服务器返回的文件.
我测试了selenium,phantomjs,casperjs,并研究了我能在网上找到的任何东西.
他们都不支持下载.我错过了什么吗?有没有支持下载的无头浏览器/测试框架?
我正在构建一个scraper,以使JS单页面应用程序易于抓取.
在对PhantomJS(内存泄漏,过时的webkit,不死生物进程以及许多其他问题)感到非常沮丧之后,我决定改用NightmareJS,它可以做同样的事情,但在引擎盖下使用Electron.Electron有很多优点(使用最新的铬,速度要快得多)但它需要X服务器才能运行.
因为我需要让它在ubuntu服务器下运行,所以我遵循了这个要点.现在我有一个伟大的EC2实例,一切都准备好运行无头电子
xvfb-run electron
Run Code Online (Sandbox Code Playgroud)
关键是我需要通过nightmareJS运行它(我将在node.js服务器脚本中使用).我想知道如何将参数传递给噩梦以便通过svfb启动电子
我想要实现的目标 在Ubuntu 14 non gui上成功运行无头镀铬的量角器测试.
设置 使用多个参考页面我已成功安装:Xvfb Chrome最新浏览器Protractor 3.3.0 Java 7(也尝试使用Java 8)并设置了LOCAL_HOME.此外,设法使用此引用启动Xvfb .
量角器conf
exports.config = {
baseUrl: 'http://<qa environment>',
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
jasmineNodeOpts: {
showColors:true,
defaultTimeoutInterval: 2500000
},
capabilities: {
'browserName': 'chrome'
},
specs: ['administration/*-spec.js'], //'signinandout/*-spec.js', 'homepage/*-spec.js',
onPrepare: function(){
//browser.driver.manage().window().setSize(1280, 1080);
}
}
Run Code Online (Sandbox Code Playgroud)
异常堆栈跟踪:
/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/error.js:26构造函数(opt_error){^ WebDriverError:未知错误:Chrome无法启动:异常退出(驱动程序信息:chromedriver = 2.21.371461( 633e689b520b25f3e264a2ede6b74ccc23cb636a),platform = Linux 3.13.0-87-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:60.16秒构建信息:版本:'2.52.0',修订版:'4c2593c' ,时间:'2016-02-11 19:06:42'系统信息:主持人:'vagrant-ubuntu-trusty-64',ip:'10 .0.2.15',os.name:'Linux',os.arch: 'amd64',os.version:'3.13.0-87-generic',java.version:'1.7.0_101'驱动程序信息:org.openqa.selenium.chrome.ChromeDriver at WebDriverError(/ usr/local/lib/node_modules /protractor/node_modules/selenium-webdriver/error.js:26:26)在/ usr的Object.checkLegacyResponse(/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/error.js:580:13)/local/lib目录/ node_modules /量角器/ node_modules /硒webd river/lib/webdriver.js:64:13在Promise.invokeCallback_(/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1329:14)在TaskQueue.execute_(/ usr) /local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2790:14)在TaskQueue.executeNext_(/ usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise) .js:2773:21)/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2652:27 at/usr/local/lib/node_modules/protractor/node_modules/selenium- …
selenium google-chrome webdriver headless-browser protractor
任何人都可以帮我设置无头镀铬的代理服务器,同时在这里提到Node.js中的灯塔镀铬启动器
const launcher = new ChromeLauncher({
port: 9222,
autoSelectChrome: true, // False to manually select which Chrome install.
additionalFlags: [
'--window-size=412,732',
'--disable-gpu',
'--proxy-server="IP:PORT"',
headless ? '--headless' : ''
]
});
Run Code Online (Sandbox Code Playgroud)
但是,上面的脚本根本没有命中我的代理服务器.Chrome似乎回退到DIRECT://与目标网站的连接.
关于在无头chrome的上下文中使用HTTP/HTTPS代理服务器的另一个资源就是这个.但它没有给出如何从Node.js使用它的任何示例.
google-chrome node.js headless-browser lighthouse google-chrome-devtools
我有一个非常简单的Puppeteer脚本,用于exposeFunction()在无头Chrome中运行一些东西.
(async function(){
var log = console.log.bind(console),
puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
var functionToInject = function(){
return window.navigator.appName;
}
await page.exposeFunction('functionToInject', functionToInject);
var data = await page.evaluate(async function(){
console.log('woo I run inside a browser')
return await functionToInject();
});
console.log(data);
await browser.close();
})()
Run Code Online (Sandbox Code Playgroud)
这失败了:
ReferenceError: window is not defined
Run Code Online (Sandbox Code Playgroud)
其中指的是注入的功能.如何window在无头Chrome内部进行访问?
我知道我可以做evaluate(),但这不适用于我动态传递的函数:
(async function(){
var log = console.log.bind(console),
puppeteer = require('puppeteer');
const browser = await puppeteer.launch(); …Run Code Online (Sandbox Code Playgroud) 我有puppeteer js设置,并能够使用所有行
let rows = await page.$$eval('#myTable tr', row => row);
Run Code Online (Sandbox Code Playgroud)
现在我想让每一行得到"td",然后从那些行获取内部文本.
基本上我想这样做:
var tds = myRow.querySelectorAll("td");
Run Code Online (Sandbox Code Playgroud)
其中myRow是一个表行,有puppeteer.js
我正在使用 chrome headless 来截图。但是当添加超时时,进程不会退出,它会保持活动状态......有没有办法在错误(例如超时)时终止进程?
没有超时的命令及其输出(这个正在工作):
>>> chrome --headless --screenshot --no-sandbox https://stackoverflow.com
[0808/174530.681784:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
Fontconfig warning: "/etc/fonts/fonts.conf", line 146: blank doesn't take any effect anymore. please remove it from your fonts.conf
[0808/174531.735502:ERROR:cert_verify_proc_nss.cc(981)] CERT_PKIXVerifyCert for securepubads.g.doubleclick.net failed err=-8179
[0808/174532.060892:INFO:headless_shell.cc(590)] Written to file screenshot.png.
>>>
Run Code Online (Sandbox Code Playgroud)
超时命令(测试时为 1 毫秒)及其输出(待定):
>>> chrome --headless --screenshot --no-sandbox --timeout=1 https://stackoverflow.com
[0808/174256.720003:ERROR:gpu_process_transport_factory.cc(1016)] Lost UI shared context.
Fontconfig warning: "/etc/fonts/fonts.conf", line 146: blank doesn't take any effect anymore. please remove it from your fonts.conf
[0808/174256.772496:INFO:headless_shell.cc(344)] Timeout.
Run Code Online (Sandbox Code Playgroud) 我想使用无头 Chrome 拍摄页面快照,它将返回一个文件给我,因此我正在创建一个 mht 文件,因为它将包含有关网页的更多信息。所以,现在我想在 iframe 中渲染这个快照,但我无法这样做。
<iframe src="file:///home/user/untitled1.mht"></iframe>
Run Code Online (Sandbox Code Playgroud)
渲染后会返回错误。
Attempted to load a multipart archive into an subframe
Run Code Online (Sandbox Code Playgroud) Karma我使用、Sinon和执行一些单元测试Mocha。它运行良好,一个月来,我在运行这些单元测试时遇到了一些问题。我的 HeadlessChrome 出现错误。事实上,它显示了这个错误:
HeadlessChrome 83.0.4103 (Windows 10.0.0) ERROR
Disconnected, because no message in 30000 ms.
Run Code Online (Sandbox Code Playgroud)
我有这个业力配置:
module.exports = function (config) {
config.set({
// Others configs
...
port: 9876,
browsers: ['ChromeHeadlessNoSandbox'],
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox', // required to run without privileges in docker
'--user-data-dir=/tmp/chrome-test-profile',
'--disable-web-security'
]
}
},
captureTimeout: 10000,
plugins: [
'karma-mocha', 'karma-mocha-reporter', 'karma-junit-reporter', 'karma-chrome-launcher',
'karma-typescript', 'karma-html-reporter'
]
});
};
Run Code Online (Sandbox Code Playgroud)
我找到了两种方法来修复它:
module.exports …Run Code Online (Sandbox Code Playgroud) headless-browser ×10
node.js ×3
selenium ×3
html ×2
puppeteer ×2
casperjs ×1
electron ×1
headless ×1
javascript ×1
karma-runner ×1
lighthouse ×1
mhtml ×1
nightmare ×1
phantomjs ×1
protractor ×1
python-2.7 ×1
shell ×1
webdriver ×1
xvfb ×1