我想知道是否有可能以某种方式安装没有X11依赖的Headless Chrome,例如在VM或Docker容器中?目前,当我从Chrome repo安装它时,它会下载许多无用的东西作为依赖项.构建Docker容器需要很长时间,而且还需要额外的空间.
google-chrome headless headless-browser google-chrome-headless
我正在尝试使用Google Chrome替代PhantomJS将HTML呈现为PDF.到目前为止,它对我来说一直很好.我唯一的问题是我没有找到任何方法来翻译以下PhantomJS代码:
page.paperSize = {
footer: {
contents: phantom.callback(function(pageNum, numPages) {
return "Power by MyWebsite. Created on "+formatDate(new Date())+"<span style='float:right'>" + pageNum + " / " + numPages + "</span>";
})
}
}
Run Code Online (Sandbox Code Playgroud)
格式化日期与问题中的函数相同如何格式化JavaScript日期
但是,我还没有找到一种方法来在谷歌Chrome中无头复制这种行为.我正在使用来自https://github.com/cyrus-and/chrome-remote-interface的 Chrome远程接口(CDP)
这是我的chrome远程接口代码的概述:
return new Promise(async function (resolve, reject) {
const url = "<MyURL here>";
const [tab] = await Cdp.List()
const client = await Cdp({ host: '127.0.0.1', target: tab });
await Promise.all([
Network.enable(),
Page.enable()
]);
Page.loadEventFired(function () {
setTimeout(function () {
resolve(Page.printToPDF({displayHeaderFooter:true}))); //https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
}, …Run Code Online (Sandbox Code Playgroud) 我正在以“正常”模式在 Cromedrive 中编写代码并且工作正常。当我更改为无头模式时,它不会下载文件。我已经尝试了我在互联网上找到的代码,但没有用。
chrome_options = Options()
chrome_options.add_argument("--headless")
self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r'{}/chromedriver'.format(os.getcwd()))
self.driver.set_window_size(1024, 768)
self.driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': os.getcwd()}}
self.driver.execute("send_command", params)
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何解决这个问题?
PS:我不一定需要使用 Chomedrive。如果它在另一个驱动器中工作,那对我来说没问题。
python selenium google-chrome selenium-chromedriver google-chrome-headless
我正在尝试在 ubuntu docker 映像中运行 chromium 的无头实例,但我不断收到错误消息,该系统没有显示器,也没有音频输入或输出
[0307/003516.533150:ERROR:bus.cc(393)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有没有办法禁用 dbus,因为 docker 似乎不支持它,这是我的 Dockerfile 中的行
FROM arm64v8/ubuntu:bionic
RUN apt install -y chromium-browser
RUN apt install -y chromium-drivers
Run Code Online (Sandbox Code Playgroud)
这是我使用的启动线
chromium-browser --no-sandbox --headless --autoplay-policy=no-user-gesture-required --no-first-run --disable-gpu --use-fake-ui-for-media-stream --use-fake-device-for-media-stream --disable-sync index.html
Run Code Online (Sandbox Code Playgroud) 我有
urls = ['url','url','url'...]
Run Code Online (Sandbox Code Playgroud)
这就是我正在做的事情
urls.map(async (url)=>{
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: 'networkidle' });
})
Run Code Online (Sandbox Code Playgroud)
这似乎不等待页面加载并快速访问所有网址(我甚至尝试使用page.waitFor)
只是想知道我做了一些根本错误的事情,或者不建议/支持这种类型的功能
使用 pupeteer 对网站进行屏幕截图时,会显示 cookie 同意提示。我想在截取屏幕截图之前忽略或接受这些提示。我面临的问题是大多数网站以不同的方式呈现cookie提示,因此很难隔离它们。
如何使用 pupeteer 最好地定位和消除这些提示?
我试图配置系统测试,以在硒中使用无头铬.我有以下水豚配置:
# spec/support/capybara.rb
Capybara.server = :puma, { Silent: true }
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless, screen_size: [1400, 1400]
end
end
Run Code Online (Sandbox Code Playgroud)
和以下Dockerfile(没有数据库,因为我正在使用主机):
FROM ruby:2.5.1
RUN apt-get update
RUN apt-get install -y wget git
# Node
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash -
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update
# Essentials
RUN apt-get install -y …Run Code Online (Sandbox Code Playgroud) 我正试图从PhantomJS转向Headless Chrome,并遇到了一些障碍.对于本地测试,我使用Docker Compose来启动和运行所有相关服务.要配置谷歌浏览器,我使用的图像将它和ChromeDriver捆绑在一起,同时在端口上提供服务4444.然后我在这个简化的docker-compose.yml文件中将它链接到我的app容器,如下所示:
web:
image: web/chrome-headless
command: [js-specs]
stdin_open: true
tty: true
environment:
- RACK_ENV=test
- RAILS_ENV=test
links:
- "chromedriver:chromedriver"
chromedriver:
image: robcherry/docker-chromedriver:latest
ports:
- "4444"
cap_add:
- SYS_ADMIN
environment:
CHROMEDRIVER_WHITELISTED_IPS: ""
Run Code Online (Sandbox Code Playgroud)
然后,我有一个spec/spec_helper.rb文件来引导测试环境和相关的工具.我定义了:headless_chrome驱动程序并将其指向ChromeDriver的本地绑定; http://chromedriver:4444.我很确定以下内容是正确的:
Capybara.javascript_driver = :headless_chrome
Capybara.register_driver :chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: { args: %w[headless disable-gpu window-size=1440,900] },
)
Capybara::Selenium::Driver.new app,
browser: :chrome,
url: "http://chromedriver:4444/",
desired_capabilities: capabilities
end
Run Code Online (Sandbox Code Playgroud)
我们也使用VCR,但我已将其配置为忽略与ChromeDriver使用的端口的任何连接:
VCR.configure …Run Code Online (Sandbox Code Playgroud) ruby-on-rails capybara docker-compose google-chrome-headless
我想es使用Puppeteer 推出一款带有西班牙语的谷歌Chrome浏览器.
我试过puppeteer.launch(args:['--lang=es',...],...)但是没用.
我试过传递环境变量,LANGUAGE=es mocha puppeteer-test.js但它没有用.
我已尝试使用该userDataDir选项并传递带有文件的Preferences文件夹{ "intl": { "accept_languages": "es" } }但浏览器设置 - 语言仍然不显示西班牙语,也window.navigator.languages没有window.navigator.language
我正在使用
Puppeteer 0.11.0
Node 8.4.0
NPM 5.2.0
macOS El Capitan 10.11.6
MacBook Pro Retina,15英寸,2015年中
javascript google-chrome browser-testing google-chrome-headless puppeteer
我想在此页面获取websocket数据https://upbit.com/exchange?code=CRIX.UPBIT.KRW-BTC,其websocket URL是动态的,仅在第一次连接时有效,第二次连接到它时将不再发送数据.
所以我想知道也许无头镀铬可以帮助我监控websocket数据.
有任何想法吗?谢谢!