Reputation: 127
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:
Upvotes: 1
Views: 5869
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?
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, marionette 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 geckodriver, selenium and firefox, 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:
Can I change the setCapabilites on/off while the driver is running?: The short answer is No, you can't change the capabilites while the session initiated by the webdriver is In Progress
and you can find a couple of detailed discussions in:
Is it easier to do this using ChromeDriver?: Again the precise answer is No, ChromeDriver also gets detected and you can find a couple of detailed discussions in:
Here you can find a detailed discussion on Which Firefox browser versions supported for given Geckodriver version?
Upvotes: 3