Cegah Selenium membuka jendela baru

hari ini, saya menggunakan Selenium untuk mengurai data dari sebuah situs web. Ini kode saya:

    public ActionResult ParseData()
    {
        IWebDriver driver = new FirefoxDriver();
        driver.Navigate().GoToUrl(myURL);
        IList<IWebElement> nameList = driver.FindElements(By.XPath(myXPath));
        return View(nameList);
    }

Masalahnya adalah, setiap kali dijalankan, ia membuka jendela baru di lokasi myURL, lalu mengambil datanya, dan membiarkan jendela itu terbuka.

Saya tidak ingin Selenium membuka jendela baru di sini. Jalankan saja di latar belakang dan berikan saya data yang diurai. Bagaimana saya bisa mencapainya? Tolong bantu aku. Terima kasih banyak.


person Triet Doan    schedule 19.01.2014    source sumber
comment
Meluncurkan driver Selenium dalam permintaan web bukanlah ide yang bagus. Mengapa Anda tidak mengunduh laman tersebut di URLsaya menggunakan, misalnya, objek WebClient - lalu, cukup mengekstrak data yang diperlukan dari respons?   -  person turdus-merula    schedule 19.01.2014


Jawaban (2)


Secara umum saya setuju dengan andrei: mengapa menggunakan Selenium jika Anda tidak berencana berinteraksi dengan jendela browser? Karena itu, hal paling sederhana yang harus dilakukan untuk mencegah Selenium membiarkan jendela terbuka, adalah menutupnya sebelum kembali dari fungsinya:

driver.Quit();

Pilihan lain, jika halaman tidak harus dimuat di Firefox, adalah dengan menggunakan HtmlUnit Driver sebagai gantinya (tidak memiliki UI)

person user1433852    schedule 19.01.2014

Tampaknya pada setiap permintaan web Anda membuat (meskipun, tidak menutup/membuang) objek driver Selenium. Seperti yang saya katakan di komentar, mungkin ada solusi yang lebih baik untuk masalah Anda...

Saat Anda ingin mengambil laman web dan mengekstrak beberapa data darinya, silakan gunakan:

Aplikasi web bukanlah lingkungan yang ramah untuk IMHO contoh driver Selenium. Namun, jika Anda masih ingin bermain-main dengannya, jadikan instance Selenium statis dan gunakan kembali di antara permintaan. Namun, jika itu akan digunakan dari permintaan bersamaan (beberapa thread berjalan pada saat yang sama), kemungkinan besar akan terjadi naksir :) Anda memiliki opsi untuk melindungi instance (kunci, bagian kritis, dll.) namun kemudian Anda akan memiliki skalabilitas nol.

Jawaban singkat: mengambil data dengan cara lain, Selenium hanya untuk tes eksplorasi otomatis sejauh yang saya tahu...

Tapi...

Jika Anda benar-benar harus menjelajahi situs web itu - sumber data Anda - dengan Selenium... Kemudian ambil data menggunakan Selenium terlebih dahulu - secara spekulatif, dalam proses lain (< em>aplikasi konsol yang berjalan di latar belakang) dan menyimpannya di beberapa file atau di database. Kemudian, dari aplikasi web, baca datanya dan kembalikan ke klien Anda :)

Jika Anda belum memiliki data yang diminta klien, tanggapi dengan beberapa kesalahan - "silakan coba lagi dalam 5 menit", dan beri tahu aplikasi konsol (yang berjalan di latar belakang) untuk mengambil data tersebut (ada berbagai cara berkomunikasi lintas batas proses - aplikasi web dan aplikasi konsol dalam kasus kami, namun Anda dapat menggunakan file / db sederhana untuk mengantri "permintaan data" - apa pun)...

person turdus-merula    schedule 19.01.2014
comment
Terima kasih atas jawaban anda. Jadi, saya tidak bisa menggunakan Selenium di latar belakang seperti HtmlAgilityPack? - person Triet Doan; 19.01.2014
comment
@Forte_201092 ... Saya rasa tidak, HtmlAgilityPack terlihat seperti library khusus untuk menangani HTML. Di sisi lain, menjalankan Selenium berarti memulai proses baru (browser), menjalankannya, dll. Bukan hal yang dapat dilakukan dalam permintaan web... Maaf jika tidak membantu... - person turdus-merula; 20.01.2014