Selenium starts up a Chrome session but crashes right after - python-3.x

I receive one of these errors when attempting to open up a session.
selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from chrome not reachable
(Session info: chrome=80.0.3987.132)
selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from disconnected: Unable to receive message from renderer
(Session info: chrome=80.0.3987.132)
ChromeDriver = 80.0.3987.106
I googled these errors and none of the solutions helped, here's my current code: (one of the solutions suggested adding Chrome options)
from selenium import webdriver
class YoutubeBot():
def __init__(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
self.driver = webdriver.Chrome('/usr/local/bin/chromedriver', chrome_options=chrome_options)
EDIT: I have now found out that this issue is fixed by using headless, I'd still like to test my code while writing it, is there another solution perhaps? (I'm using the Xfce4 DE on Arch Linux)

This error message...
selenium.common.exceptions.SessionNotCreatedException: Message: session not created from disconnected: Unable to receive message from renderer (Session info: chrome=80.0.3987.132)
...implies that the ChromeDriver was unable to initiate/spawn a new Chrome Browser session.
You need to consider a couple of things:
The absolute location of the ChromeDriver must be passed through a Key / Value pair as follows:
driver = webdriver.Chrome(executable_path='/Users/qa/Documents/Python/chromedriver')
While initializing the session you need to use the options argument instead of chrome_options.
So effectively, you code block will be:
from selenium import webdriver
class YoutubeBot():
def __init__(self):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
self.driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options)

The solution was simple, sudo the file.
I feel stupid and should've checked this earlier, probably should've taken this into consideration.
When running, all I had to do was sudo python -i main.py and Chrome magically booted up without an error.

Related

i'm with an error or bug in the library selenium

I have this bug/error in selenium. Could you help me figure it out? i've already reinstalled the webdriver and it goes on like this
my error
DevTools listening on ws://127.0.0.1:61264/devtools/browser/527472ae-6b78-4f06-a7bb-d740b906ec7e
[6916:6896:0514/085747.521:ERROR:edge_auth_errors.cc(408)] EDGE_IDENTITY: Get Default OS Account failed: Error: Primary Error: kImplicitSignInFailure,
Secondary Error: kAccountProviderFetchError, Platform error: 0, Error string:
[6916:6896:0514/085749.135:ERROR:fallback_task_provider.cc(124)] Every renderer should have at least one task provided by a primary task provider. If a "Renderer" fallback task is shown, it is a bug. If you have repro steps, please file a new bug and tag it as a dependency of crbug.com/739782.
PS C:\Users\Brayan\Documents\pytest> [6916:6896:0514/085800.567:ERROR:fallback_task_provider.cc(124)] Every renderer should have at least one task provided by a primary task provider. If a "Renderer" fallback task is shown, it is a bug. If you have repro steps, please file a new bug and tag it as a dependency of crbug.com/739782.
code:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.By import By
driver = webdriver.Edge()
driver.get(r'https://stackoverflow.com/posts/72240271/edit')

How to get rid of response messages initiating Google Chrome using ChromeDriver in Python Selenium

I have problem with this that I want to have a clean terminal/output but when I use selenium in python and when I call :
driver = webdriver.Chrome()
I get this message between my output :
[14096:8964:1002/201524.623:ERROR:chrome_browser_main_extra_parts_metrics.cc(228)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[14096:8964:1002/201524.623:ERROR:chrome_browser_main_extra_parts_metrics.cc(231)] crbug.com/1216328: Checking Bluetooth availability ended.
[14096:8964:1002/201524.632:ERROR:chrome_browser_main_extra_parts_metrics.cc(234)] crbug.com/1216328: Checking default browser status started. Please report if there is no report that this ends.
[14096:5428:1002/201524.633:ERROR:device_event_log_impl.cc(214)] [20:15:24.633] Bluetooth: bluetooth_adapter_winrt.cc:1073 Getting Default Adapter failed.
[14096:8964:1002/201524.660:ERROR:chrome_browser_main_extra_parts_metrics.cc(238)] crbug.com/1216328: Checking default browser status ended.
My code doesn't have any errors but I get this temp output
How can I remove this output? any code I need to remove this?
If you are using Selenium with Python then add these extra options into your Selenium code which will disable all the errors getting displayed on Console-
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)
These error messages...
[5124:4344:1128/184821.088:ERROR:chrome_browser_main_extra_parts_metrics.cc(226)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[5124:4344:1128/184821.145:ERROR:chrome_browser_main_extra_parts_metrics.cc(229)] crbug.com/1216328: Checking Bluetooth availability ended.
...are the reasult of some Parametrized tests are flaky due to a timeout in recording expensive metrics on startup.
As per the discussion Parametrized tests are flaky due to a timeout in recording expensive metrics on startup isherman#chromium.org mentions either of the calls in chrome_browser_main_extra_parts_metrics.cc are flaky:
bluetooth_utility::ReportBluetoothAvailability()
shell_integration::GetDefaultBrowser()
Seems asvitkine#chromium.org have submitted a commit mentioning:
Don't log histogram DefaultBrowser.State on Linux. The code to query
the default browser state sometimes hangs Chrome start up on browser
tests bots, causing flakiness. Disable the relevant code on Linux
until a solution can be found. Also, revise some instrumentation
messages to be more concise and more clear about when the bug in
question might happen. Once this lands, we should be able to see if
any more tests are affected by this or whether the bug can be closed
and diagnostic logs can be removed.
This fix should address the issue in the upcoming releases once the flaky tests are addressed.
Temporary Solution
If you want to suppress the error logs you can add the experimental option 'excludeSwitches', ['enable-logging'] through an instance of ChromeOptions() as follows:
Python solution:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
Java solution:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOptions("excludeSwitches", ['enable-logging']);
you can use playwright:
pip install --upgrade pip
pip install playwright
playwright install
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("http://playwright.dev")
print(await page.title())
await browser.close()
asyncio.run(main())
This is the Docs of playwright

Chrome Driver error selenium Message: session not created from disconnected: unable to connect to renderer

I was using chrome webdriver in selenium.
I noticed that my chrome version is 88.0.4324.104, However, I am unable to find the exact version for chrome driver as all I can find is below version.
As this result, I got the following error when I run the script.
selenium.common.exceptions.SessionNotCreatedException: Message: session not created
from disconnected: unable to connect to renderer
I also read the post here, it has to be exactly the same version.
Can someone advise on this.
As you are using chrome=88.0.4324.104 you need to use the matching ChromeDriver (matching the MAX version). So effectively you can use either of the following versions of ChromeDriver:
ChromeDriver 88.0.4324.27
ChromeDriver 88.0.4324.96
References
You can find a couple of relevant detailed discussions in:
SessionNotCreatedException: Message: session not created from disconnected: unable to connect to renderer with ChromeDriver 2.45 Chrome v71
WebDriverException: disconnected: unable to connect to renderer even on providing correct path of latest chromedriver
Automation Testing Error : org.openqa.selenium.WebDriverException: disconnected: unable to connect to renderer

Selenium with Python. "Bluetooth: bluetooth_adapter_winrt.cc:1076 " . Error [duplicate]

I have updated Selenium but the error keeps occurring even though the web page loads. However, in some instances, the driver starts but it is stagnant. Is this causing an issue and if so, how do I resolve it?
[11556:9032:0502/152954.314:ERROR:device_event_log_impl.cc(162)] [15:29:54.314] Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter failed.
This error message...
ERROR:device_event_log_impl.cc(162)] [15:29:54.314] Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter failed.
...implies that ScopedClosureRunner on_init failed in BluetoothAdapterWinrt::OnGetDefaultAdapter().
Analysis
This error is defined in bluetooth_adapter_winrt.cc as follows:
void BluetoothAdapterWinrt::OnGetDefaultAdapter(
base::ScopedClosureRunner on_init,
ComPtr<IBluetoothAdapter> adapter) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (!adapter) {
BLUETOOTH_LOG(ERROR) << "Getting Default Adapter failed.";
return;
}
Solution
Ensure that:
Selenium is upgraded to current levels Version 3.141.59.
ChromeDriver is updated to current ChromeDriver v84.0 level.
Chrome is updated to current Chrome Version 84.0 level. (as per ChromeDriver v84.0 release notes)
If your base Web Client version is too old, then uninstall it and install a recent GA and released version of Web Client.
Additional considerations
However it was observed that this error can be supressed by running Chrome as root user (administrator) on Linux. but that would be a deviation from the documentation in ChromeDriver - WebDriver for Chrome where it is mentioned:
A common cause for Chrome to crash during startup is running Chrome as root user (administrator) on Linux. While it is possible to work around this issue by passing '--no-sandbox' flag when creating your WebDriver session, i.e. the ChromeDriver session as such a configuration is unsupported and highly discouraged.
Ideally, you need to configure your environment to run Chrome as a regular user instead.
Suppressing the error
Finally, as per the documentation in Selenium Chrome Driver: Resolve Error Messages Regarding Registry Keys and Experimental Options these error logs can be supressed by adding the argument:
excludeSwitches: ['enable-logging']
So your effective code block will be:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://www.google.com/")
I had simmilar problems
ConnectionResetError: [WinError 10054] An existing connection was
forcibly closed by the remote host and
Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter
failed.
Both of them disapeared after running cmd as an administrator. I don't know what is the exact cause of this issue but for me it seems that's a lack of privs while running selenium.
If anyone could explain why it is happening would be great.
Simply switching on my device's Bluetooth solved the problem... Don't know the reason behind it
I was getting the same error. On a code that was working yesterday.
The Code is available at this url at this moment https://youtu.be/0kLoVGLTISg?list=PLUDwpEzHYYLvx6SuogA7Zhb_hZl3sln66&t=4073
https://github.com/Microsoft/vscode-python/issues/3252 Found the Resolution hint over here in the comments section, along with https://docs.python.org/3/library/unittest.html#unittest.TestCase.setUp,
suggesting that, we cannot run on "Pycharm"/VSCode using right click -> run from within the class level, we need to run it from the module level i.e. outside the class level, since setUpClass() method is not executed when running from inside of the class.

multithreading: chromedriver does not open url in second window

Java code in thread function:
System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--user-data-dir="+config.chromeUserDir);
chromeOptions.addArguments("--profile-directory="+profile);
chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.com");
and create object and start in thread with following code
Driver d1 = new Driver(profile);
d1.start();
Driver d2 = new Driver(profile1);
d1.start();
two different profiles have been created, code works well with single thread but with multiple threads it does not open google website in two separate windows. it says,
Starting ChromeDriver 2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac) on port 25692
Only local connections are allowed.
Starting ChromeDriver 2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac) on port 25954
Only local connections are allowed.
Oct 14, 2018 2:10:46 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Oct 14, 2018 2:10:46 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Created new window in existing browser session.
and it opens google in only one window. window opened by anther thread remains idle. Could anyone please help?
Issue Analysis
This issue can be reproduced even if you try to run chrome driver in two profile sequential without quiting the driver.
ChromeOptions chromeOptions1 = new ChromeOptions();
chromeOptions1.addArguments("--user-data-dir=C:/Users/My UserName/AppData/Local/Google/Chrome/User Data/Default");
chromeOptions1.addArguments("--profile-directory=Profile 1");
WebDriver driver1 = new ChromeDriver(chromeOptions1);
driver1.get("https://www.google.com");
ChromeOptions chromeOptions2 = new ChromeOptions();
chromeOptions2.addArguments("--user-data-dir=C:/Users/My UserName/AppData/Local/Google/Chrome/User Data/Default");
chromeOptions2.addArguments("--profile-directory=Profile 2");
WebDriver driver2 = new ChromeDriver(chromeOptions2);
When running first instance browser starts and page will be accesed. While running the second instance browser starts, but the page will not open.
The driver.get() line fails with following exception for the second instance
Exception in thread "main" org.openqa.selenium.NoSuchSessionException: invalid session id
(Driver info: chromedriver=70.0.3538.16 (16ed95b41bb05e565b11fb66ac33c660b721f778),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 2.99 seconds
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{message=unknown error: Chrome failed to start: crashed
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location C:\Program Files (x86)\Google\Chrome\Application\chrome.exe is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
(Driver info: chromedriver=70.0.3538.16 (16ed95b41bb05e565b11fb66ac33c660b721f778),platform=Windows NT 10.0.17134 x86_64), platform=ANY}]
When the first instance is started the user data directory get locked and we are getting error for the second instance as the user data directory is in use.
We can simulate this issue by opening one chrome instance manually with one profile and trying to open one more chrome instance with other profile using chrome driver.
Solution
We have to use different user-data directory for each profile. We no need to create profile manually in chrome browser and also no need to provide --profile-directory argument in chrome options. But you can maintain the sessions and history by mentioning different user-data-dir path for each chrome driver instance
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--user-data-dir=C:/ChromeProfiles/FirstProfile"); // Custom directory path for first profile
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.com");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--user-data-dir=C:/ChromeProfiles/SecondProfile"); // Custom directory path second profile
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.com");
This is will maintains the sessions and history in two profile that you are looking for.
Also multithreading will work without any issue.
class Driver extends Thread {
private String profile;
public Driver(String profile){
this.profile=profile;
}
public void run()
{
System.out.println ("Thread " +
Thread.currentThread().getId() +
" is running");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--user-data-dir=C:/ChromeProfiles/"+profile);
// chromeOptions.addArguments("--profile-directory="+profile);
chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.com");
}
}
public class MultiThreadDriver
{
public static void main(String[] args)
{
ChromeDriverManager.getInstance().setup();
Driver object = new Driver("First Profile");
object.start();
Driver object1 = new Driver("Second Profile");
object1.start();
}
}
Because user data directory get locked when the first instance run, you can change forlder cache of profile 2.
Just copy your profile directory to another folder, and specify it in your --user-data-dir. Browser instances running under debugging mode.
Refer to my answer under another question for detailed explanation: https://stackoverflow.com/a/75191111/4810608

Resources