সেলেনিয়াম ওয়েবড্রাইভার পটভূমিতে নীরবে ব্রাউজার উইন্ডো খুলতে পারে?


161

আমার একটি সেলেনিয়াম টেস্ট স্যুট রয়েছে যা অনেকগুলি পরীক্ষা চালায় এবং প্রতিটি নতুন পরীক্ষায় এটি আমার যে কোনও উইন্ডো খোলা আছে তার উপরে একটি ব্রাউজার উইন্ডো খোলে। স্থানীয় পরিবেশে কাজ করার সময় খুব ঝাঁকুনি দেওয়া। ব্যাকগ্রাউন্ডে উইন্ডো খুলতে সেলেনিয়াম বা ওএস (ম্যাক) কে বলার কোনও উপায়?


আপনি করছেন তাহলে driver = webdriver.Firefox() : আপনার কোডে, আমার উত্তর এখানে অনুসরণ stackoverflow.com/a/23898148/1515819
Stéphane Bruckert

@ স্টাফেনব্রাকার্ট কি ক্রোমের জন্য এমন কিছু আছে?
ই.প্রানীথ

stackoverflow.com/a/48775203/1207193 পরিশ্রমী সমাধান 2020 GoogleChrome উইন্ডোজ
eusoubrasileiro

উত্তর:


64

কয়েকটি উপায় আছে, তবে এটি একটি সাধারণ "কনফিগারেশন মান সেট করুন" নয়। আপনি যদি কোনও শিরোনামহীন ব্রাউজারে বিনিয়োগ না করেন যা সবার প্রয়োজনের সাথে খাপ খায় না, এটি হ্যাকের সামান্য বিষয়:

ফায়ারফক্স উইন্ডো কীভাবে আড়াল করবেন (সেলেনিয়াম ওয়েবড্রাইভার)?

এবং

সেলেনিয়াম আরসিতে ব্রাউজারটি লুকানো কি সম্ভব?

আপনি বিশেষত: 'অনুমিত' হয়ে কিছু প্যারামিটারগুলিতে ক্রোমে যেতে পারেন --no-startup-window

মনে রাখবেন যে কয়েকটি ব্রাউজারের জন্য, বিশেষত আইই, এটি আপনার পরীক্ষাগুলি ফোকাসে না চালিয়ে আঘাত করবে।

উইন্ডোটি একবার খোলার পরে এটি লুকানোর জন্য আপনি অটোআইটি দিয়ে কিছুটা হ্যাক করতে পারেন।


8
"- না-স্টার্টআপ-উইন্ডো" এখন
কোরি গোল্ডবার্গ

2
প্রকৃতপক্ষে, "- কোন-স্টার্টআপ উইন্ডো" এর পরিবর্তে "- হেডলেস" ব্যবহার করুন, আমি নিশ্চিত করেছি যে এটি ম্যাক এবং ক্রোম ভি 80 এ কাজ করে
Loaderon

178

যদি আপনি পাইথনের সাথে সেলেনিয়াম ওয়েব ড্রাইভার ব্যবহার করে থাকেন তবে আপনি পাইভিচুয়ালডিজপ, এক্সভিএফবি এবং এক্সেফির জন্য পাইথন র‍্যাপারটি ব্যবহার করতে পারেন।

PyVirtualDisplay এর নির্ভরতা হিসাবে Xvfb প্রয়োজন। উবুন্টুতে, প্রথমে এক্সভিএফবি ইনস্টল করুন:

sudo apt-get install xvfb

তারপরে পাইপি থেকে পাইভিচুয়ালডিসপ্লায় ইনস্টল করুন:

pip install pyvirtualdisplay

পাইভিউচুয়ালডিসপ্লে সহ একটি হেডলেস মোডে পাইথনের সেলেনিয়াম স্ক্রিপ্টের নমুনা:

    #!/usr/bin/env python

    from pyvirtualdisplay import Display
    from selenium import webdriver

    display = Display(visible=0, size=(800, 600))
    display.start()

    # now Firefox will run in a virtual display. 
    # you will not see the browser.
    browser = webdriver.Firefox()
    browser.get('http://www.google.com')
    print browser.title
    browser.quit()

    display.stop()

সম্পাদনা প্রাথমিক উত্তরটি 2014 সালে পোস্ট করা হয়েছিল এবং এখন আমরা 2018 এর শেষ মুহুর্তে রয়েছি else সমস্ত কিছু পছন্দ করুন, ব্রাউজারগুলিও উন্নত হয়েছে। ক্রোমের এখন পুরোপুরি শিরোনামহীন সংস্করণ রয়েছে যা ইউআই উইন্ডোটি আড়াল করতে কোনও তৃতীয় পক্ষের লাইব্রেরি ব্যবহারের প্রয়োজনীয়তা দূর করে। নমুনা কোডটি নিম্নরূপ:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options

    CHROME_PATH = '/usr/bin/google-chrome'
    CHROMEDRIVER_PATH = '/usr/bin/chromedriver'
    WINDOW_SIZE = "1920,1080"

    chrome_options = Options()  
    chrome_options.add_argument("--headless")  
    chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
    chrome_options.binary_location = CHROME_PATH

    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,
                              chrome_options=chrome_options
                             )  
    driver.get("https://www.google.com")
    driver.get_screenshot_as_file("capture.png")
    driver.close()

একটি সুন্দর, পরিষ্কার সমাধান। তার জন্য ধন্যবাদ. একটি যাদুমন্ত্র মত কাজ করে. আরও +1
প্রাপ্য

9
এটি ম্যাক ওএসএক্সের জন্য উপলব্ধ?
ভ্যানগার্ড

আপনি যদি উবুন্টু ব্যবহার করেন এবং আপনার পরীক্ষার স্যুট পাইথনে থাকে তবে এটি দুর্দান্ত
কেভজিটলার


1
ক্রোম_প্লেশনগুলির ব্যবহার অবহেলা করা হয়েছে, এখন কেবল বিকল্পসমূহ
মজিমি

40

ক্রোম 57 এর শিরোনামহীন পতাকাটি পাস করার একটি বিকল্প রয়েছে যা উইন্ডোটিকে অদৃশ্য করে তোলে।

শেষটি কোনও উইন্ডো আরম্ভ করে না বলে এই পতাকাটি কোনও - স্টার্টআপ উইন্ডো থেকে পৃথক। এটি পৃষ্ঠার অ্যাপ্লিকেশনগুলির হোস্টিংয়ের জন্য ব্যবহৃত হয় ।

পতাকাটি সেলেনিয়াম ওয়েবড্রাইভার (ক্রোমড্রাইভার) এ পৌঁছানোর জন্য জাভা কোড:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);

আপনি কি জানেন যে ভিবিএ ভাষায় একই কাজ করা সম্ভব?
মার্টিন

@Martin আমি জানি না কিনা আপনার সমস্যা ইতিমধ্যে সংশোধন করা হয়েছে কি না, কিন্তু একটি দ্রুত অনুসন্ধান পরে আমি ঐ পাওয়া যায়নি: github.com/prajaktamoghe/selenium-vba/issues/33 stackoverflow.com/questions/45121955/... এই আছে তোমাকে সাহায্য?
Marlies

19

কোনও ব্রাউজার ছাড়াই চলার জন্য, আপনি এটিকে হেডলেস মোডে চালাতে পারেন ।

পাইথনে আমি আপনাকে একটি উদাহরণ দেখাই যা এই মুহূর্তে আমার জন্য কাজ করছে

from selenium import webdriver


options = webdriver.ChromeOptions()
options.add_argument("headless")
self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options)

আমি আপনাকে অফিসিয়াল গুগল ওয়েবসাইট https://developers.google.com/web/updates/2017/04/headless-chrome এ সম্পর্কে আরও কিছু তথ্য যোগ করব


সবার সহজ উত্তর!
মারসিওপোর্টো

2020 সালের হিসাবে খুব সুচারুভাবে কাজ করেছেন
জনি বয়

15

ক্রোম 57 যেহেতু আপনার মাথাছাড়া যুক্তি রয়েছে:

var options = new ChromeOptions();
options.AddArguments("headless");
using (IWebDriver driver = new ChromeDriver(options))
{
    // the rest of your test
}

ক্রোমের হেডলেস মোড ইউআই সংস্করণের চেয়ে 30.97% ভাল পারফর্ম করে। অন্যান্য হেডলেস ড্রাইভার ফ্যান্টমজেএস ক্রোমের হেডলেস মোডের চেয়ে 34.92% ভাল সরবরাহ করে।

PhantomJSDriver

using (IWebDriver driver = new PhantomJSDriver())
{
     // the rest of your test
}

মোজিলা ফায়ারফক্সের হেডলেস মোডটি ইউআই সংস্করণের চেয়ে 3.68% ভাল পারফর্ম করে। এটি হতাশার পরে যেহেতু ক্রোমের হেডলেস মোডটি ইউআই এর চেয়ে 30% ভাল সময় অর্জন করেছে। অন্যান্য হেডলেস ড্রাইভার ফ্যান্টমজেএস ক্রোমের হেডলেস মোডের চেয়ে 34.92% ভাল সরবরাহ করে। আমার জন্য আশ্চর্যের বিষয়, এজ ব্রাউজারটি তাদের সবাইকে মারধর করে।

var options = new FirefoxOptions();
options.AddArguments("--headless");
{
    // the rest of your test
}

এটি ফায়ারফক্স 57+ থেকে পাওয়া যায়

মোজিলা ফায়ারফক্সের হেডলেস মোডটি ইউআই সংস্করণের চেয়ে 3.68% ভাল পারফর্ম করে। এটি হতাশার পরে যেহেতু ক্রোমের হেডলেস মোডটি ইউআই এর চেয়ে 30% ভাল সময় অর্জন করেছে। অন্যান্য হেডলেস ড্রাইভার ফ্যান্টমজেএস ক্রোমের হেডলেস মোডের চেয়ে 34.92% ভাল সরবরাহ করে। আমার জন্য আশ্চর্যের বিষয়, এজ ব্রাউজারটি তাদের সবাইকে মারধর করে।

নোট: ফ্যান্টমজেএস আর রক্ষণ করা হয় না!


8

আমি আপনাকে ফ্যান্টম অফিশিয়াল ওয়েবসাইটে যেতে হবে এমন আরও তথ্যের জন্য ফ্যান্টম জেএস ব্যবহার করার পরামর্শ দিচ্ছি

যতদূর আমি জানি ফ্যান্টমজেএস কেবল ফায়ারফক্সের সাথে কাজ করে ..

ফ্যান্টমজেস.এক্স.ই ডাউনলোড করার পরে আপনার প্রকল্পটিতে আমদানি করতে হবে যেমন আপনি নীচের ছবিতে দেখতে পারেন ফ্যান্টমজগুলি সাধারণ >> গ্রন্থাগার >> ফ্যান্টমজেস.এক্সইএর মধ্যে রয়েছে এখানে চিত্র বর্ণনা লিখুন

এখন আপনার সেলেনিয়াম কোডটির ভিতরে যা যা আছে তা হ'ল লাইনটি পরিবর্তন করা

browser = webdriver.Firefox()

মত কিছু

import os
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe"
browser = webdriver.PhantomJS(path2phantom)

ফ্যান্টমজে যাওয়ার পথটি আলাদা হতে পারে ... আপনার পছন্দ মতো পরিবর্তন করুন :)

এটা আমার পক্ষে কাজ করেছে। এবং অবশ্যই তিনি আপনার জন্য চিয়ার্স কাজ করবে


যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত উত্তরগুলি যদি লিঙ্কযুক্ত পৃষ্ঠাটি পরিবর্তন করে তবে অবৈধ হয়ে উঠতে পারে
slfan

7

উইন্ডোতে আপনি win32gui ব্যবহার করতে পারেন:

import win32gui
import win32con
import subprocess

class HideFox:
    def __init__(self, exe='firefox.exe'):
        self.exe = exe
        self.get_hwnd()


    def get_hwnd(self):
      win_name = get_win_name(self.exe)
      self.hwnd = win32gui.FindWindow(0,win_name)


    def hide(self):
        win32gui.ShowWindow(self.hwnd, win32con.SW_MINIMIZE)
        win32gui.ShowWindow(self.hwnd, win32con.SW_HIDE)

    def show(self):
        win32gui.ShowWindow(self.hwnd, win32con.SW_SHOW)
        win32gui.ShowWindow(self.hwnd, win32con.SW_MAXIMIZE)

def get_win_name(exe):
    '''simple function that gets the window name of the process with the given name'''
    info = subprocess.STARTUPINFO()
    info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    raw=subprocess.check_output('tasklist /v /fo csv', startupinfo=info).split('\n')[1:-1]
    for proc in raw:
        try:
            proc=eval('['+proc+']')
            if proc[0]==exe:
                return proc[8]             
        except:
            pass
    raise ValueError('Could not find a process with name '+exe)

উদাহরণ:

hider=HideFox('firefox.exe')  #can be anything, eq: phantomjs.exe, notepad.exe ...
#To hide the window
hider.hide()
#To show again
hider.show()

তবে এই সমাধানটিতে একটি সমস্যা রয়েছে - সেন্ড_কিগুলি পদ্ধতি ব্যবহার করা উইন্ডোটিকে দেখায়। আপনি জাভাস্ক্রিপ্ট ব্যবহার করে এটি মোকাবেলা করতে পারেন যা উইন্ডোটি দেখায় না:

def send_keys_without_opening_window(id_of_the_element, keys)
    YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';")

5

আমি উইন্ডোজ ফায়ারফক্সের জন্য এই কোডটি ব্যবহার করেছি এবং উত্তর পেয়েছি: ( এখানে রেফারেন্স )

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

Options = Options()
Options.headless = True

Driver = webdriver.Firefox(options=Options, executable_path='geckodriver.exe')
Driver.get(...)
...

তবে আমি এটি অন্যান্য ব্রাউজারগুলির জন্য পরীক্ষা করি না।


প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছে এবং লেখক ইতিমধ্যে উত্তরটি অনুমোদিত করেছেন।
সারিক শাইখ

4
আমি অন্য লোকদের জন্য জবাব দিয়েছি যারা এই পোস্টটি দেখতে পাবে
নবনেট

1
আমাদের ফায়ারফক্স বিকল্প দেওয়ার জন্য ধন্যবাদ
টিমডিসি

আপনার স্বাগত। যদি আপনার সেলেনিয়াম এবং জাঙ্গো সম্পর্কে কোনও প্রশ্ন থাকে আমি আপনাকে উত্তর দেব।
নবনেটস

ক্রোমেও কাজ করে!
হাইজেনবার্গ

3

এটি বিকল্প হতে পারে। এখানে অভিন্ন জাভা কোড।

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setHeadless(true);
        WebDriver driver = new ChromeDriver(chromeOptions);

1

এটি একটি সাধারণ নোডজেএস সমাধান যা সেলেনিয়ামের নতুন সংস্করণ 4.x (সম্ভবত 3.x) এও কাজ করে।

ক্রোম:

const { Builder } = require('selenium-webdriver')
const chrome = require('selenium-webdriver/chrome');

let driver = await new Builder().forBrowser('chrome').setChromeOptions(new chrome.Options().headless()).build()

await driver.get('https://example.com')

ফায়ারফক্স:

const { Builder } = require('selenium-webdriver')
const firefox = require('selenium-webdriver/firefox');

let driver = await new Builder().forBrowser('firefox').setFirefoxOptions(new firefox.Options().headless()).build()

await driver.get('https://example.com')

পুরো জিনিসটি কেবল পটভূমিতে চলে। ঠিক আমরা কী চাই


1

আপনি যদি ক্রোম ড্রাইভার ব্যবহার করে থাকেন তবে আপনি এই খুব সাধারণ কোডটি ব্যবহার করতে পারেন: (এটি আমার পক্ষে কাজ করেছিল)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome('chromedriver2_win32/chromedriver.exe', options=chrome_options)
driver.get('https://www.anywebsite.com')


0

এখানে একটি। নেট সমাধান যা আমার পক্ষে কাজ করেছে:

ফ্যান্টমজেগুলি এখানে ডাউনলোড করুন http://phantomjs.org/download.html

ডাউনলোডে বিন ফোল্ডার থেকে .exe অনুলিপি করুন এবং আপনার ভিজ্যুয়াল স্টুডিও প্রকল্পের বিন ডিবাগ / রিলিজ ফোল্ডারে পেস্ট করুন।

এটি ব্যবহার করে যুক্ত করুন

using OpenQA.Selenium.PhantomJS;

আপনার কোডে ড্রাইভারটি এভাবে খুলুন:

PhantomJSDriver driver = new PhantomJSDriver();
using (driver)
{
   driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login");
   //your code here 
}

0

আপনি যদি উবুন্টু (জিনোম) ব্যবহার করছেন তবে জनोম এক্সটেনশন অটো-মুভ-উইন্ডোটি ইনস্টল করার জন্য একটি সহজ কাজ রয়েছে: https://extensions.gnome.org/extension/16/auto-move-windows/

তারপরে ব্রাউজারটি সেট করুন (উদাঃ ক্রোম) অন্য একটি কার্যক্ষেত্রে (যেমন Works ওয়ার্কস্পেস 2)। ব্রাউজারটি নিঃশব্দে অন্য কর্মক্ষেত্রে চালিত হবে এবং আপনাকে আর বিরক্ত করবে না। আপনি এখনও কোনও বাধা ছাড়াই আপনার কর্মক্ষেত্রে ক্রোম ব্যবহার করতে পারেন।


0

হাই আমার পাইথন এবং অপশনগুলি ব্যবহার করে আমার ক্রোমড্রাইভারের সাথে একই সমস্যা ছিল adএডডি_গারগমেন্ট ("মাথাবিহীন") আমার পক্ষে কাজ করে না তবে আমি বুঝতে পেরেছিলাম কীভাবে এটি ঠিক করতে হয় তাই নীচের কোডে এনেছি

opt=webdriver.ChromeOptions()
opt.arguments.append("headless")

আমি আশা করি এটি আপনার পক্ষে কাজ করে


0

এটি অর্জনের এক উপায় হ'ল হেডলেস মোডে ব্রাউজার চালানো। এর আর একটি সুবিধা হ'ল পরীক্ষাগুলি দ্রুত সম্পাদন করা হয়।

ক্রোম ব্রাউজারে হেডলেস মোড সেট করতে দয়া করে নীচের কোডটি সন্ধান করুন।

package chrome;
   public class HeadlessTesting {
        public static void main(String[] args) throws IOException{
            System.setProperty("webdriver.chrome.driver",
                    "ChromeDriverPath");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("headless");
            options.addArguments("window-size=1200x600");
            WebDriver driver = new ChromeDriver(options);
            driver.get("https://contentstack.built.io");
            driver.get("https://www.google.co.in/");
            System.out.println("title is: " + driver.getTitle());
            File scrFile = ((TakesScreenshot) driver)
                    .getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File("pathTOSaveFile"));
            driver.quit();
        }
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.