Bypass ReCaptcha dalam tes Selenium

ReCaptcha (ini adalah "captcha" yang sangat disukai) adalah salah satu hal paling menyakitkan yang mungkin ditemui oleh robot penguji dalam perjalanannya. Ribuan berbagai video yang direkam oleh imigran dari India yang cerah sedang berjalan di Web tentang tarian apa yang ada dengan rebana adalah mungkin untuk menipu binatang buas ini. Memang, cukup sulit untuk mencoba berinteraksi dengan skrip yang diprogram dengan hal yang tujuan utamanya adalah memastikan bahwa "Anda bukan robot".

Penafian yang sangat penting: tidak mungkin menipu captcha.

Jika Anda telah mengalami masalah ini, dan sedang membaca artikel ini mencoba membuat resep Google untuk obat mujarab, maka ketahuilah bahwa itu tidak ada. Selain itu, di kepala Anda kemungkinan muncul pemikiran inovatif tentang simulasi perilaku pengguna yang realistis menggunakan WebDriver, dengan elemen mouse-overing yang acak, klik pada input, dan Thread.sleep () ditempatkan dengan hati-hati. Diketahui sepenuhnya bahwa pendekatan ini tidak akan berhasil, jangan sia-siakan waktu Anda.

gambar

Ternyata tidak ada jalan keluar?

Tidak semuanya pesimis. Terkadang cukup untuk mencoba memberi diri Anda jawaban paling akurat untuk pertanyaan "Apa tantangan yang dihadapi saya?" dan lihat situasinya lebih luas. Dalam kebanyakan kasus, Anda akan memahami bahwa tujuan Anda bukan untuk menipu captcha, tetapi untuk memotongnya untuk menguji fungsi yang tersembunyi di baliknya. Pada contoh kasus saya, saya akan membagikan kepada Anda opsi yang saya temukan untuk menyelesaikan tugas.

Konteks: kami mengintegrasikan sebagian produk kami ke layanan pihak ketiga, dan ingin memantau apakah semuanya baik-baik saja di pihak mereka, karena mereka tidak mencakup bagian pihak ketiga dari platform mereka. Untuk mendapatkan akses ke fungsionalitas kami, Anda harus masuk dulu. Saat itulah saya bertemu dengan captcha berhadapan muka. Selanjutnya, saya memberikan semua opsi yang telah saya coba untuk mengatasi masalah ini.


Tidak bekerja


Masuk melalui Google atau Facebook


Selain otentikasi klasik, ada Login kanonik dengan Google / Facebook. Tentu saja, "captcha" mereka juga ada di sana, jadi opsi ini tidak membantu menyelesaikan masalah.

Mensimulasikan perilaku pengguna


Ya, saya juga mencobanya. Itu lucu, tapi terlalu naif.



Pekerja


Profil Chrome / Firefox


Mari kita bicara tentang opsi "langsung" pertama. Driver untuk browser ini (chromedriver / geckodriver) memiliki kemampuan untuk boot di bawah Profil Pengguna yang telah ditentukan. Ini menyimpan semua kata sandi, cookie, sesi, dan bahkan riwayat dan bookmark browser yang tersimpan. Yaitu dengan demikian, kami hanya melewatkan langkah masuk yang sama sekali tidak penting untuk tugas kami, dan dengan demikian kami langsung menuju ke halaman dengan objek tes. Diimplementasikan sebagai berikut:

  1. Buat profil browser "bersih"
  2. Masukkan captcha secara manual dan masuk ke sumber yang diinginkan
  3. Salin profil yang diperlukan ke proyek kami (HOWTO untuk Firefox dan Chrome )

Setelah itu, kita perlu memberi tahu pengemudi bahwa itu harus dimuat dari profil yang ditentukan:

Firefox:

//   FirefoxProfile profile = new FirefoxProfile(new File("////")); //      FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); //   WebDriver driver = new FirefoxDriver(options); 

Chrome:

 //      ChromeOptions options = new ChromeOptions(); options.addArgument("--user-data-dir=/////"); options.addArgument("--profile-directory=____"); //   WebDriver driver = new ChromeDriver(options); 

Pendekatan ini terbukti baik ketika menguji pada mesin lokal dengan browser dan tokek / cromedriver biasa diinstal, tetapi ada masalah ketika berjalan di Jenkins. Kami meningkatkan hub dan node Selenium di dalam kluster Kubernetes, jadi kami mengalami masalah dalam bentuk direktori yang terlalu lama untuk memasang direktori di dalam kontainer (profil yang bersih rata-rata beratnya sekitar 25 MB, yang cukup banyak), serta beberapa masalah dengan izin CRUD dari browser, yang tidak dapat membuat perubahan pada profil dalam runtime, dan jatuh dengan eksekusi "kesalahan tidak diketahui: gagal menulis file prefs". Selain itu, memperbarui profil setelah cookie dan sesi telah mencapai Tanggal Kedaluwarsa mereka cukup merepotkan, dan saya tidak ingin menyimpan folder besar dengan internal profil dalam proyek, sehingga opsi berikut pada akhirnya dipilih.

Kue kering


β€œDan kotak baru saja dibuka” - ini adalah bagaimana mungkin untuk menggambarkan situasinya, setelah kami baru saja menambahkan cookie yang diterima secara manual ke driver. Algoritme tindakan sesederhana mungkin dan tidak bergantung pada browser yang dipilih:

  1. Masuk secara manual
  2. Melalui Jaringan kita melihat Header Permintaan -> Cookie yang dikirimkan oleh browser kita

Tambahkan ke tes kami sebagai berikut:

 //  cookie private static final Cookie COOKIE = new Cookie("", "", "", "", new Date("")); //   WebDriver driver = new ChromeDriver(options); //  cookie   driver.manage().addCookie(COOKIE); 

Kelemahan yang jelas dari pendekatan ini adalah perlunya mengubah cookie secara manual setelah masa berlakunya berakhir. Tetapi, karena periode ini adalah 3 bulan pada platform yang diuji, kami memilih solusi ini.



Dan jika saya tidak perlu login?



Tetapi bagaimana dengan situasi ketika itu bukan tentang otorisasi dan sesi, tetapi tentang komisi tindakan satu kali (misalnya menempatkan pesanan dari keranjang, mendaftarkan pengguna baru, dll)? Di sini situasinya bahkan lebih buruk. Dua opsi yang bisa saya temukan adalah:

  1. Setuju dengan pengembang Anda untuk memberi Anda beberapa solusi. Google memberikan kesempatan seperti itu , tetapi ingat bahwa Anda secara sadar membuat lubang kecil dalam keamanan.
  2. Manfaatkan layanan berbayar pihak ketiga yang mengambil tangkapan layar captcha di pihak Anda, coba dekodekan, dan kirimi Anda nilai yang didekripsi. Saya sendiri belum mencoba metode ini dan tidak dapat sepenuhnya merekomendasikannya.



Untuk meringkas


Seperti yang Anda lihat, tidak ada situasi tanpa harapan. Namun, bodoh untuk menyangkal bahwa semua opsi di atas benar-benar memiliki kekurangan, cukup signifikan, sehingga pilihan ada di tangan Anda.

Terima kasih atas perhatian anda

NB Jika Anda tahu solusi lain yang bekerja di kehidupan nyata - tolong jelaskan di komentar, itu akan sangat menarik untuk dibaca.

Source: https://habr.com/ru/post/id442034/


All Articles