Joshua Santiago
Joshua Santiago

Reputation: 127

Can I run Selenium using geckodriver without a webpage detecting marionette?

I want to use FirefoxDriver with Selenium but I keep getting detected by webpages. When I add the following code

System.setProperty("webdriver.gecko.driver", "../../../../../../../usr/bin/geckodriver");
FirefoxOptions opt = new FirefoxOptions();
opt.setCapability("marionette", false);
driver = new FirefoxDriver(opt);

The webpages cant't detect I'm using geckodriver but I can't use Selenium automation and that's my problem. I need the automation without detection.

QUESTIONS:

  1. Can I change the setCapabilites on/off while the driver is running?
  2. Is it easier to do this using ChromeDriver?

Upvotes: 1

Views: 5869

Answers (1)

undetected Selenium
undetected Selenium

Reputation: 193058

Using FirefoxDriver with Selenium but getting detected is quite common now as:

Selenium identifies itself

You can find a detailed discussion in How to make Selenium script undetectable using GeckoDriver and Firefox through Python?


Marionette

As per the documentation, Marionette, is the automation driver for Mozilla’s Gecko engine. It can remotely control the UI and the internal JavaScript of a Gecko platform, such as Mozilla Firefox. It can control both the chrome (i.e. menus and functions) or the content (the webpage loaded inside the browsing context), giving a high level of control and ability to replicate user actions. In addition to performing actions on the browser, Marionette can also read the properties and attributes of the DOM. Now, shares much of the same API as Selenium/WebDriver, with additional commands to interact with Gecko’s chrome interface. Its goal is to replicate what Selenium does for web content, i.e. to enable the tester to have the ability to send commands to remotely control a user agent.

We have also discussed in details about Why Firefox requires GeckoDriver? within this thread

Finally, in the discussion Difference between webdriver.firefox.marionette & webdriver.gecko.driver we discussed about initializing Firefox sessions using legacy Firefox 47.x browsers and GeckoDriver enabled Firefox >47.x browsers. The conclusion was when using Firefox browsers > v77.x you have to mandatorily use GeckoDriver which extensively uses the marionette. So configuring marionette as false won't help us out. While using the latest version of , and , you have to use the marionette by default.

If you still want to initialise a Firefox browsing session without using marionette you need to configure "marionette" to false as follows:

System.setProperty("webdriver.gecko.driver", "C://path//to//geckodriver.exe");
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability("marionatte", false);
FirefoxOptions opt = new FirefoxOptions();
opt.merge(dc);
FirefoxDriver driver =  new FirefoxDriver(opt);
driver.get("https://stackoverflow.com");
System.out.println("Application opened");
System.out.println("Page Title is : "+driver.getTitle());
driver.quit();

You can find a couple of relevant discussions in:


The other questions:


Outro

Here you can find a detailed discussion on Which Firefox browser versions supported for given Geckodriver version?

Upvotes: 3

Related Questions