How to start my chrome so that tools like puppeteer can control it. I know I can use certain command in terminal to do that. And I am using MacOS
You can start Chrome from the command line with remote debugging enabled on port 9222 with the following command:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
This will allow Puppeteer to control it.
Just make sure to replace /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
with the actual path to your Chrome application if it's located somewhere else.
Please note that you should not have Chrome running before executing this command. If it is, you'll have to close it first.
I can not connect it using puppeteer, is there any setting I should do in chrome?
There's no specific setting you need to do in Chrome but make sure you're connecting Puppeteer to the correct port.
Here's a basic example of how to connect Puppeteer to Chrome:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({browserURL: 'http://localhost:9222'});
const page = await browser.newPage();
await page.goto('http://example.com');
// other actions...
await browser.close();
})();
In the code above, Puppeteer is connecting to the Chrome instance that you've started with remote debugging enabled on port 9222. The browserURL
in the puppeteer.connect
method corresponds to the --remote-debugging-port
you've set when starting Chrome.
If you still can't connect it, make sure Chrome is not already running when you start it with the --remote-debugging-port
option, because this could cause issues. If Chrome is already running, you'll have to close it first. Also, make sure that there's no other process using the port 9222. If there is, you can choose another port number. Just make sure to use the same number in the --remote-debugging-port
option and in the browserURL
in your Puppeteer script.
looks it is connected, because if I use some random port instead of 9222, the code throws errors. While using this port, it does not throw error
but const page = await browser.newPage();
this line never get executed
looks it is connected, because if I use some random port instead of 9222, the code throws errors. While using this port, it does not throw error
but const page = await browser.newPage(); this line never get executed
looks it is connected, because if I use some random port instead of 9222, the code throws errors. While using this port, it does not throw error
but const page = await browser.newPage(); this line never get executed
If you're connecting Puppeteer to an existing browser instance, you may not be able to create new pages if the browser has been started with the --single-process
or --no-sandbox
flags.
Here are a few things you can try:
Make sure that you don't have these flags in your command when you start Chrome.
Try to access an existing page instead of creating a new one:
const pages = await browser.pages();
const firstPage = pages[0];
await firstPage.goto('http://example.com');
Try to disconnect and reconnect the browser:
await browser.disconnect();
browser = await puppeteer.connect({browserURL: 'http://localhost:9222'});
Check if there is any error message or warning in the console output when you run your Puppeteer script. It might provide some clue about the issue.
Make sure you're using the latest version of Puppeteer. If not, you can update it with npm:
npm update puppeteer
If none of the above helps, it could be a bug in Puppeteer. You may want to report it on the Puppeteer GitHub page: https://github.com/puppeteer/puppeteer/issues.
Remember that each of these steps is an individual attempt at solving the problem. Try them one at a time and see if any of them solves your issue.
still can not be connected, this way works on my old intel mac
If it worked on your old Intel Mac but not on your new one, it's possible that your new machine has the M1 chip. The M1 chip uses a different architecture (ARM), which may cause compatibility issues with some software.
Here are a few things you can try:
Run Chrome using Rosetta. To do this, find Google Chrome in the Finder (usually located in the Applications folder), press Command+I (or right-click the app and choose Get Info), and then check the box labeled "Open using Rosetta."
Download and use the beta version of Puppeteer that has preliminary support for Apple Silicon. You can install it with the following command:
npm i puppeteer@10.4.0-next.1626153524000
const puppeteer = require('puppeteer');
(async () => {
const browserFetcher = puppeteer.createBrowserFetcher();
const latestRevision = await browserFetcher.download('809590.');
const browser = await puppeteer.launch({executablePath: latestRevision.executablePath});
// your code here...
})();
Remember to replace '809590.'
with the revision number of the Chromium version you want to download. You can find the revision numbers on the Chromium website.
Again, try each of these steps one at a time to see if they solve your issue.
[40876:259:1109/104527.143480:ERROR:CONSOLE(0)] "Unchecked runtime.lastError: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received", source: https://ogs.google.com/u/0/widget/app?awwd=1&gm3=1&origin=chrome-untrusted%3A%2F%2Fnew-tab-page&origin=chrome%3A%2F%2Fnew-tab-page&cn=app&pid=1&spid=243&hl=en (0)
The error message you're seeing is a common error message from Chrome and is not specifically related to Puppeteer. It usually appears when a Chrome extension uses the chrome.runtime.sendMessage
API to send a message to a non-existent listener, or when the listener doesn't respond before the message channel is closed.
If you're using Puppeteer to automate a Chrome browser with extensions installed, it's possible that one of the extensions is causing the error.
You can try the following things to debug the issue:
Try running Puppeteer without any Chrome extensions. You can do this by launching Chrome with a new user data directory, which will not have any extensions installed:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome
Then, in your Puppeteer script, connect to the Chrome instance with the --remote-debugging-port
and --user-data-dir
options:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({browserURL: 'http://localhost:9222'});
// your code...
})();
If the error persists, try to isolate the issue by running a minimal Puppeteer script. For example, you can use Puppeteer to simply open a new page and navigate to a URL:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({browserURL: 'http://localhost:9222'});
const page = await browser.newPage();
await page.goto('http://example.com');
// other actions...
await browser.close();
})();
If the error still appears with this minimal script, it indicates that the issue is not related to your Puppeteer code but to the Chrome browser itself or to the way it is launched.
If the error only appears with certain URLs, it could be that these URLs are triggering the error. Try to identify if there's a pattern or a specific URL that consistently triggers the error.
Remember to try each of these steps one at a time and see if any of them resolve the issue. If none of these steps help, you may want to consider reporting the issue on the Puppeteer GitHub page or on the Chrome support forum.
fixed it by disabled one of my chrome extension
That's great news! Extensions can sometimes interfere with automation tools like Puppeteer, so disabling or removing them can often resolve issues. Remember this troubleshooting step in case you encounter similar issues in the future. Happy coding!