Why does using excludeSwitches in c# - c#

Python code works:
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
But the C# code is not working:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddAdditionalCapability("excludeSwitches", "disable-popup-blocking");

List<string> ls = new List<string>();
ls.Add("enable-automation");
ChromeOptions options = new ChromeOptions();
options.AddExcludedArguments(ls);
using (IWebDriver driver = new ChromeDriver("C:\\Program\\chromedriver", options))
{
Console.ReadKey();
}

I use "excludeSwitches" to get rid of the error showing on the output console.
A device attached to the system is not functioning error using ChromeDriver Selenium on Windows OS
This is my code:
var options = new ChromeOptions();
List<string> ls = new List<string>();
ls.Add("enable-automation");
ls.Add("excludeSwitches");
ls.Add("enable-logging");
ls.Add("disable-popup-blocking");
options.AddExcludedArguments(ls); //set option element in list to options
IWebDriver driver = new ChromeDriver(options); //open webdriver with your options

Related

Downloading Files with Headless Chrome - Selenium C#

ChromeOptions options = new ChromeOptions();
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
chromeDriverService.SuppressInitialDiagnosticInformation = true;
options.AddArgument("--headless");
string downloadPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Downloads";
options.AddUserProfilePreference("download.default_directory", downloadPath);
options.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1);
options.AddArgument("--window-size=1920,1080");
For some reason I cannot download files in chrome when running headless in Selenium -
When not running in headless mode there is no issue downloading files.
Selenium Webdriver Chromedriver V110.0.5
According to Selenium dev page: https://www.selenium.dev/blog/2023/headless-is-going-away/
you need to user "--headless=new" from now.
However, I'm still struggling with downloading files, even using this new attribute
My use case was a bit different. However, the below code gave me the intended results.
Refer to the below code :
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", #"C:\Downloads");
options.AddUserProfilePreference("download.prompt_for_download", false);
ChromeDriver driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://example.com/download-file");
IWebElement downloadLink = driver.FindElement(By.Id("download-link"));
downloadLink.Click();
System.Threading.Thread.Sleep(4000); // wait for awhile for 4 seconds
driver.Close();

Unable to get Chrome Performance logs in Selenium C#

I am using following nuget packages in my solution
Selenium.WebDriver - v3.141.0
Selenium.WebDriver.ChromeDriver - v79.0.3945.3600
using following code I am creating a Chrome driver instance
ChromeOptions options = new ChromeOptions();
//Get Performance Logs from Network tab
ChromePerformanceLoggingPreferences perfLogPrefs = new ChromePerformanceLoggingPreferences();
options.PerformanceLoggingPreferences = perfLogPrefs;
options.SetLoggingPreference("performance", LogLevel.All);
(or)
ChromePerformanceLoggingPreferences perfLogPrefs = new
ChromePerformanceLoggingPreferences();
perfLogPrefs.AddTracingCategories(new string[] { "devtools.timeline" });
options.PerformanceLoggingPreferences = perfLogPrefs;
options.SetLoggingPreference("goog:loggingPrefs", LogLevel.All);
options.AddAdditionalCapability(CapabilityType.EnableProfiling, true, true);
and combining with this
options.AddUserProfilePreference("intl.accept_languages", "en-US");
options.AddUserProfilePreference("disable-popup-blocking", "true");
options.AddArgument("test-type");
options.AddArgument("--disable-gpu");
options.AddArgument("no-sandbox");
options.AddArgument("start-maximized");
options.LeaveBrowserRunning = true;
IWebDriver driver = new ChromeDriver(options);
but while creating Chrome driver instance, I am getting following error message
invalid argument: entry 0 of 'firstMatch' is invalid
from invalid argument: perfLoggingPrefs specified, but performance logging was not enabled
May I know what changes do I need to make please to get the performance logs with latest version of Chrome and Selenium driver
I am able to retrieve Performance Logs using the below code when I was using lower versions of Chrome driver (2.35.0)
var logs = driver.Manage().Logs.GetLog("performance");
for (int i = 0; i < logs.Count; i++)
{
Console.WriteLine(logs[i].Message);
}
With Selenium WebDriver (v4.0.0-alpha04) and Selenium.Chrome.WebDriver (v79.0.0) and using the following code, I am able to retrieve the performance logs.
ChromeOptions options = new ChromeOptions();
//Following Logging preference helps in enabling the performance logs
options.SetLoggingPreference("performance", LogLevel.All);
//Based on your need you can change the following options
options.AddUserProfilePreference("intl.accept_languages", "en-US");
options.AddUserProfilePreference("disable-popup-blocking", "true");
options.AddArgument("test-type");
options.AddArgument("--disable-gpu");
options.AddArgument("no-sandbox");
options.AddArgument("start-maximized");
options.LeaveBrowserRunning = true;
//Creating Chrome driver instance
IWebDriver driver = new ChromeDriver(options);
//Extracting the performance logs
var logs = driver.Manage().Logs.GetLog("performance");
for (int i = 0; i < logs.Count; i++)
{
Console.WriteLine(logs[i].Message);
}
Hope this helps.
All these days, I was using the following two lines with latest versions of Selenium WebDriver and Chrome Driver and couldn't figure out what the issue was and now with the latest versions, the following two lines of code is not required.
var perfLogPrefs = new ChromePerformanceLoggingPreferences();
options.PerformanceLoggingPreferences = perfLogPrefs;

How to run multiple chrome profiles in selenium c#?

How can I run multiple chrome profiles at the same time?
ChromeOptions options = new ChromeOptions();
var service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
options.AddArgument("--user-data-dir=profiles);
var driver = new ChromeDriver(service, options);
driver.Navigate().GoToUrl("http://ip-api.com");
I want to run all the records I have created in a directory simultaneously and perform the driver.Navigate () action. GoToUrl ("http://ip-api.com/json/"); without having to repeat it many times.

Can I control selenium with firefox portable?

I have read a lot of articles related to using selenium and portable firefox. But the code doesn't work with me. Did I do something wrong? I am using firefox portable 67 and Geckodriver v0.24.0.
FirefoxDriverService driverService = FirefoxDriverService.CreateDefaultService(#"D:\C# Project\FirefoxPortal tesst\FirefoxPortal tesst\bin\Debug\", "geckodriver.exe");
FirefoxOptions options = new FirefoxOptions();
//var profile = new FirefoxProfileManager().GetProfile("");
options.Profile = new FirefoxProfile(#"D:\C# Project\FirefoxPortal tesst\FirefoxPortal tesst\bin\Debug\FirefoxPortable\Data\profile");
options.BrowserExecutableLocation = #"D:\C# Project\FirefoxPortal tesst\FirefoxPortal tesst\bin\Debug\FirefoxPortable\FirefoxPortable.exe";
IWebDriver driver = new FirefoxDriver(driverService, options);
driver.Navigate().GoToUrl("https://stackoverflow.com/");
I do not have time today but try changing
options.BrowserExecutableLocation = #"D:\C# Project\FirefoxPortal tesst\FirefoxPortal tesst\bin\Debug\FirefoxPortable\FirefoxPortable.exe";
to
options.BrowserExecutableLocation = #"D:\C# Project\FirefoxPortal tesst\FirefoxPortal tesst\bin\Debug\FirefoxPortable\App\firefox64\firefox.exe";
or to wherever you have your firefox.exe file.

Selenium ChromeDriver how to disable the message:"DevTools on ws

So I am creating a bot with chrome headless browser and it works just fine. I had quite a lot warnings so I disabled them after reasearch with those commands:
ChromeOptions option = new ChromeOptions();
option.AddArgument("--headless");
option.AddArgument("--silent");
option.AddArgument("--disable-gpu");
option.AddArgument("--log-level=3");
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.SuppressInitialDiagnosticInformation = true;
_driver = new ChromeDriver(service, option);
But there is one more message showing when programs starts:
DevTools listening on ws://127.0.0.1:12015/devtools/browser/6b70a3c5-56c8-4c90-952a-d0e0ef254ddf
Any idea how to disable it from showing?
If you are trying to fix Selenium with Python on Windows, type:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('headless')
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
with the experimental_option line being the special sauce.
That did the trick
var service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
Driver = new ChromeDriver(service, options);
Add following two options .
option.AddArgument("--disable-extensions");
option.AddArgument("test-type");

Categories