在 puppeteer 中使用 chromium 时如何设置“不跟踪”?是否可以?
args 中是否有任何选项可以设置如下。
puppeteer.launch({ args=['DO_NOT_TRACK']})
Run Code Online (Sandbox Code Playgroud)
尝试了Chromium Switch中列出的许多选项,但找不到我需要的选项。通过设置这样的选项,我想避免谷歌分析跟踪。
我正在尝试使用通过 Puppeteer 启动的 Headless Chromium 中的本地文件。
我总是遇到以下错误:
'Cross origin requests are only supported for protocol schemes: http, data, chrome, https'
Run Code Online (Sandbox Code Playgroud)
我确实尝试过设置--allow-file-access-from-files。
它可以复制如下:
const puppeteer = require('puppeteer');
puppeteer.launch({headless:true,args:['--allow-file-access-from-files']}).then(
async browser => {
const page = await browser.newPage();
await page.setContent('<html><head><meta charset="UTF-8"></head><body><div>A page</div></body></html>');
await page.addScriptTag({url:"https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"});
await page.on('console', msg => console.log('PAGE LOG:', msg.text()));
await page.evaluate (() => {
$.get('file:///..../cors.js')
.done(
_ => console.log('done')
).fail(
e => console.log('fail:'+JSON.stringify(e))
);
});
await browser.close();
}
);
Run Code Online (Sandbox Code Playgroud)
查看正在运行的进程,看起来 Chromium 确实是通过该选项启动的。
热烈欢迎所有提示!
javascript chromium headless-browser google-chrome-headless puppeteer
我在 docker-compose 项目中将 chrome-headless 作为容器运行。我的主应用程序(我想测试的应用程序)在撰写文件中命名为“app”。
为了从 chrome-headless 容器连接到我的应用程序,我使用了 dockers 内部容器链接:http://app:3000
docker-compose.yml
version: '3'
services:
app:
build:
context: .
ports:
- 3000:3000
chrome:
image: alpeware/chrome-headless-trunk
Run Code Online (Sandbox Code Playgroud)
虽然这应该很容易,但有一个细节使事情变得复杂:chrome-headless 在“.app”域上强制执行 ssl。由于我连接到“ http://app:3000 ”,因此此规则适用。
连接时出现此错误:
Run Code Online (Sandbox Code Playgroud)net::ERR_SSL_PROTOCOL_ERROR at http://app:3000
有没有办法设置 chrome-headless 来停止在某些域上强制执行 ssl? 在 docker-compose.yml 中将名称从 'app' 更改为其他名称实际上有效,但这似乎是一个相当丑陋的解决方法。
谢谢
当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。
硒火狐浏览器:
firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。
如何使用无头选项从抓取中获得恒定的结果?
更新:
事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。
感谢您的任何建议
python selenium headless-browser geckodriver firefox-headless
我试图使用Puppeteer在 Linkedin 上打开一个上市公司页面,但每次它都会重定向到身份验证表单。当我在 Chromium 或 Chrome 中手动粘贴 URL 时,不会发生这种情况。
这是代码:
const puppeteer = require("puppeteer");
(async () => {
const url = "https://www.linkedin.com/company/google/";
const browser = await puppeteer.launch({
headless: false,
args: [
"--lang=en-GB",
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage",
],
defaultViewport: null,
pipe: true,
slowMo: 30,
});
const page = await browser.newPage();
await page.goto(url, {
waitUntil: 'networkidle0',
});
await page.waitForSelector(".top-card-layout__entity-info-container", { timeout: 10000 });
await page.close();
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
这是浏览器重定向的地方:
https://www.linkedin.com/company/google/如果我在 Chromium 或 Chrome 中手动粘贴 URL,则不会发生这种情况。
到目前为止我已经尝试过:
incognito浏览器上下文: …我有一个微服务,其中一个 API 正在生成 PDF(基于作为参数传递的类型的 3 个 pdf)。我使用 puppeteer 包来生成 PDF。在我的本地系统上发挥作用。
当我尝试在 EC2 ubuntu 16.04 服务器上运行相同的微服务时,它无法启动 chromium headless。我使用过“npm i puppeteer”,根据我的理解,它应该将 chromium headless 作为依赖项。
微服务运行良好,但问题在于 puppeteer 获取 chromium。
错误
Error: Could not find browser revision 800071. Run "PUPPETEER_PRODUCT=firefox npm install" or "PUPPETEER_PRODUCT=firefox yarn install" to download a supported Firefox browser binary.
Run Code Online (Sandbox Code Playgroud)
另外,我无法在“/node_modules/puppeteer/”中找到“.local-chromium/linux-{version}/linux-chrom”
所以,我的理解是 chrome 从未安装过
我对 docker 也很满意。我只在 docker 中运行其他微服务。因此,如果有人可以建议一些使用 docker 的解决方法,那也是可行的。
来自微服务的相关代码部分
async function createPDF(baseFile, inp) {
var templateHtml = fs.readFileSync(
path.join(process.cwd(), `utilities/${baseFile}.html`),
"utf8"
);
var template = handlebars.compile(templateHtml); …Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js headless-browser docker puppeteer
好的,这里是我试图找到解决方案的问题的简要描述.
假设我们有一个可以自动执行不同在线任务的在线服务(点击链接,导航到页面,从组合框中选择一个选项,最后从地址栏复制地址).我想要执行这些操作的站点完全使用JavaScript,我希望一切都在PHP端点我的意思是php脚本从用户获取参数,将其传递给JS Server并检索结果并将其显示回用户.
怎么可能这样做?任何的想法?我知道可以通过详细分析DOM元素来完成它,但它非常耗时且不稳定.只是想知道有没有办法,所以我可以像Selenium一样记录这个动作?那个php < - >无头浏览器交互怎么样?
我是HtmlUnit的新手,我正在尝试抓取一个使用Javascript编辑代码的网站。我听说HtmlUnit是最好的方法,因为它使用无头浏览器返回最终代码。
但是,正如您将看到的那样,我什至无法创建一个HtmlPage对象,而不会抛出一个巨大且无法理解的异常(至少考虑到我对HtmlUnit几乎为空的经验)。
这是我的代码:
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class Main {
public static void main(String[] args) {
Main scraper = new Main();
scraper.testingGargoyle();
}
private void testingGargoyle() {
String myUrl = "https://www.wearvr.com/#game_id=game_4";
WebClient webClient = new WebClient();
try {
HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl));
} catch (FailingHttpStatusCodeException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是抛出的异常:
Apr 30, 2015 5:43:50 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Obsolete content type encountered: 'application/x-javascript'.
Apr 30, …Run Code Online (Sandbox Code Playgroud) 虽然我知道有人问过这个问题,但我找不到合适的答案,所以我又问了一遍.我使用PhantomJS来抓取网站,但在Mac上速度非常慢,所以我想要Chrome浏览器,但Chrome浏览器显示浏览器很糟糕,我可以将其隐藏吗?我尝试了如下代码,仍然显示一个小浏览器窗口..
browser = webdriver.Chrome()
browser.set_window_position(0, 0)
browser.set_window_size(0, 0)
Run Code Online (Sandbox Code Playgroud) 我正在使用Puppeteer用于无头Chrome.我希望评估页面内部的一个函数,该函数使用在其他地方动态定义的其他函数的部分.
下面的代码是最小的示例/证明.实际上functionToInject()并且otherFunctionToInject()更复杂并且需要页面DOM.
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(someURL);
var functionToInject = function(){
return 1+1;
}
var otherFunctionToInject = function(input){
return 6
}
var data = await page.evaluate(function(functionToInject, otherFunctionToInject){
console.log('woo I run inside a browser')
return functionToInject() + otherFunctionToInject();
});
return data
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我得到:
错误:评估失败:TypeError:functionToInject不是函数
我理解的是:functionToInject没有被传递到页面的JS上下文中.但是如何将其传递到页面的JS上下文中?
javascript headless-browser google-chrome-headless puppeteer
headless-browser ×10
puppeteer ×5
javascript ×4
docker ×2
node.js ×2
python ×2
casperjs ×1
chromium ×1
geckodriver ×1
html ×1
htmlunit ×1
phantomjs ×1
php ×1
selenium ×1
web-scraping ×1