https://github.com/ultrafunkamsterdam/undetected-chromedriver
Patch Selenium Chromedriver yang dioptimalkan yang tidak memicu layanan anti-bot seperti Distill Network / Imperva / DataDome / Botprotect.io Secara otomatis mengunduh biner driver dan menambalnya.
pip install undetected-chromedriver
atau, jika Anda ingin bertualang, instal langsung melalui github
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Saya akan membatasi pelacak masalah. Sudah terlalu lama disalahgunakan.
ada kabar baik?
Ya, saya telah membuka Diskusi Tidak Terdeteksi yang menurut saya akan membantu kita lebih baik dalam jangka panjang.
PAKET INI TIDAK, dan saya ulangi TIDAK menyembunyikan alamat IP Anda, jadi ketika dijalankan dari pusat data (bahkan yang lebih kecil), kemungkinan besar Anda tidak akan lolos! Juga, jika reputasi ip Anda di rumah rendah, Anda tidak akan lulus!
Menjalankan kode berikut dari rumah, dan dari pusat data.
import undetected_chromedriver as uc
driver = uc . Chrome ( headless = True , use_subprocess = False )
driver . get ( 'https://nowsecure.nl' )
driver . save_screenshot ( 'nowsecure.png' )
Pembaruan besar! hati-hati karena -berpotensi- dapat merusak kode Anda.
menulis ulang mekanisme anti-deteksi alih-alih menghapus dan mengganti nama variabel, kami hanya menyimpannya, tetapi mencegahnya agar tidak dimasukkan. Ini akan membuat kita aman dari deteksi setidaknya dalam waktu dekat.
menulis ulang penamaan file, untuk mencegah berakhirnya 1000 {randomstring}_chromedriver.exe, melainkan hanya disebut undetected_chromedriver.exe
pembersihan menghapus file compat, v2, dan folder tes
menambahkan metode WebElement.click_safe(), yang dapat Anda coba jika terdeteksi setelah mengeklik tautan. Ini tidak dijamin berhasil.
menambahkan WebElement.children(self, tag=None, recursive=False) untuk mendapatkan/menemukan node anak dengan mudah. contoh:
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
menambahkan example.py tempat saya dapat mengarahkan orang ketika mengajukan pertanyaan konyol (tidak, ini sebenarnya cukup keren, semua orang harus melihatnya)
menambahkan dukungan untuk platform lambda
menambahkan dukungan untuk x86_32
menambahkan dukungan untuk pelaporan sistem sebagai linux2
beberapa pemfaktoran ulang
use_subprocess sekarang defaultnya adalah True. terlalu banyak orang yang tidak memahami multiprocessing dan name == ' main , dan setelah pengujian, sepertinya tidak ada perbedaan lagi di chrome 104+
menambahkan no_sandbox, yang defaultnya adalah True, dan ini tanpa bilah "Anda menggunakan baris perintah yang tidak aman ..." yang mengganggu.
perbarui gambar Docker. Anda sekarang dapat melakukan vnc atau rdp ke dalam wadah Anda untuk melihat jendela browser yang sebenarnya
tentu saja, mode "reguler" juga berfungsi
versi ini might
merusak kode Anda, uji sebelum pembaruan!
menambahkan logika anti-deteksi baru!
v2 sudah menjadi modul utama, jadi tidak perlu referensi ke v2 lagi. ini berarti Anda sekarang dapat menggunakan:
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' )
untuk kompatibilitas ke belakang, v2 tidak dihapus, tetapi diberi alias ke modul utama.
Memperbaiki gangguan "layar selamat datang" pada OS non-windows. Bagi para nagfetishist yang ❤ menyambut layar dan memberi Google lebih banyak data, gunakan Chrome(suppress_welcome=False).
mengganti executable_path
di konstruktor demi browser_executable_path
yang tidak boleh digunakan kecuali Anda adalah kasus Edge (ya, benar) yang tidak dapat menambahkan folder instalasi chrome khusus Anda ke variabel lingkungan PATH Anda, atau memiliki banyak browser/versi yang berbeda dan pencarian otomatis mengembalikan browser yang salah
"v1" (?) dipindahkan ke _compat untuk saat ini.
versi ketergantungan tetap
Penanganan khusus ChromeOptions dihapus, sehingga kompatibel dengan webdriver.chromium.options.ChromiumOptions
.
menghapus Chrome.get() fu dan mengembalikannya ke "hampir" asli:
with
diperlukan pernyataan lagi, meskipun itu akan tetap berfungsi demi kompatibilitas ke belakang.keberhasilan pengujian hingga saat ini: 100%
sekedar menyebutkannya lain kali, karena beberapa orang kesulitan membaca: tanpa kepala masih WIP. Mengangkat isu tidak ada gunanya
mengubah perilaku pembuatan proses menjadi sepenuhnya terpisah
mengubah metode .get(url) untuk selalu menggunakan pengelola konteks
mengubah metode .get(url) untuk menggunakan cdp di bawah tenda.
...pernyataan with
tidak diperlukan lagi..
rencana: bekerja menuju asyncification dan Selenium 4
Kapan pun Anda menghadapi rasa takut
from session not created: This version of ChromeDriver only supports Chrome version 96 # or what ever version
solusinya sederhana:
import undetected_chromedriver as uc
driver = uc . Chrome ( version_main = 95 )
Juli 2021: Saat ini sibuk mengimplementasikan Selenium 4 untuk driver chrome yang tidak terdeteksi
sekilas berita: #255
Untuk mencegah masalah yang tidak perlu dan menimbulkan masalah, harap perhatikan catatan penting di akhir dokumen ini.
Secara harfiah, hanya ini yang harus Anda lakukan. Pengaturan disertakan dan browser Anda yang dapat dieksekusi ditemukan secara otomatis. Ini juga cuplikan yang saya sarankan untuk digunakan jika Anda mengalami masalah.
import undetected_chromedriver as uc
driver = uc . Chrome ()
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
Secara harfiah, hanya ini yang harus Anda lakukan. Jika folder tertentu tidak ada, profil BARU akan dibuat. Dir data yang ditentukan seperti ini tidak akan dihapus secara otomatis saat keluar.
import undetected_chromedriver as uc
options = uc . ChromeOptions ()
# setting profile
options . user_data_dir = "c: \ temp \ profile"
# use specific (older) version
driver = uc . Chrome (
options = options , version_main = 94
) # version_main allows to specify your chrome version instead of following chrome global version
driver . get ( 'https://nowsecure.nl' ) # my own test test site with max anti-bot protection
Secara harfiah, hanya ini yang harus Anda lakukan. Anda sekarang dapat mendengarkan dan berlangganan protokol devtools tingkat rendah. Saya baru-baru ini mengetahui bahwa saya juga sedang merencanakan rilis chromedriver resmi di masa mendatang. Namun saya menerapkan sendiri untuk saat ini. Karena saya membutuhkannya sendiri untuk penyelidikan.