Chromedriverλ‘ Seleniumμ ν μ€νΈ ν κ²°κ³Ό μλνκ° μ ν μμ΄λ μΌλΆ νμ΄μ§μμ Seleniumμ μ¬μ©νκ³ μμμ κ°μ§ ν μ μμ΅λλ€. Seleniumκ³Ό Xephyrμ ν΅ν΄ ν¬λ‘¬μ μ¬μ©νμ¬ μλμΌλ‘ νμνλ κ²½μ°μλ μμ¬μ€λ¬μ΄ νλμ΄ κ°μ§λμλ€λ νμ΄μ§κ° μ’ μ’ λνλ©λλ€. μ¬μ©μ μμ΄μ νΈμ λΈλΌμ°μ μ§λ¬Έμ νμΈνμΌλ©° λͺ¨λ μΌλ° ν¬λ‘¬ λΈλΌμ°μ μ λμΌν©λλ€.
μ μμ μΈ ν¬λ‘¬ μΌλ‘μ΄ μ¬μ΄νΈλ₯Ό νμνλ©΄ λͺ¨λ κ²μ΄ μ μλνμ§λ§ Seleniumμ μ¬μ©νλ μκ° κ°μ§λ©λλ€.
μ΄λ‘ μ μΌλ‘ chromedriverμ chromeμ λ¬Έμ κ·Έλλ‘ λͺ¨λ μΉ μλ²μ λμΌνκ² λ³΄μ΄μ§λ§ μ΄λ»κ² λ κ°μ§ ν μ μμ΅λλ€.
ν μ€νΈ μ½λλ₯Ό μνλ©΄ λ€μμ μλνμμμ€.
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')
stubhubλ₯Ό νμνλ©΄ νλ λλ λ κ°μ μμ² λ΄μμ 리λλ μ λκ³ βμ°¨λ¨βλ©λλ€. λλ μ΄κ²μ μ‘°μ¬νκ³ μμΌλ©° μ¬μ©μκ° μ λ λμ μ¬μ©νκ³ μμμ μ΄λ»κ² μ μ μλμ§ μ μ μμ΅λλ€.
κ·Έλ€μ κ·Έκ±Έ μ΄λ»κ² νμ΄?
μ λ°μ΄νΈ νΈμ§ :
Firefoxμ Selenium IDE νλ¬κ·ΈμΈμ μ€μΉνμΌλ©° μΆκ° νλ¬κ·ΈμΈλ§μΌλ‘ μΌλ° firefox λΈλΌμ°μ μμ stubhub.comμ κ° λ κΈμ§λμμ΅λλ€.
νΈμ§νλ€:
Fiddlerλ₯Ό μ¬μ©νμ¬μ£Όκ³ λ°λ HTTP μμ²μ λ³Ό λ βκ°μ§ λΈλΌμ°μ βμμ²μ΄ μλ΅ ν€λμ βλ Έ μΊμ μμβμ κ°μ§κ³ μμμ μμμ΅λλ€.
νΈμ§νλ€:
Javascriptμ Selenium Webdriver νμ΄μ§μ μλ€λ κ²μ κ°μ§νλ λ°©λ² μ΄ μμ΅λκΉ? μΉ λλΌμ΄λ²λ₯Ό μ¬μ©ν λ κ°μ§ ν μμλ λ°©λ²μ΄ μμ΄μΌν©λλ€. κ·Έλ¬λμ΄ μ¦κ±°λ κ·Έλ μ§ μλ€λ κ²μ μμν©λλ€.
νΈμ§νλ€:
μ΄ μ¬μ΄νΈλ μλ²μ μ§λ¬Έμ μ λ‘λνμ§λ§ ν¬λ‘¬μ μ¬μ©ν λ μ λ λμ μ§λ¬Έμ΄ μ§λ¬Έκ³Ό λμΌνλ€λ κ²μ νμΈνμ΅λλ€.
νΈμ§νλ€:
μ΄κ²μ μλ²λ‘ 보λ΄λ μ§λ¬Έ νμ΄λ‘λ μ€ νλμ λλ€.
{"appName":"Netscape","platform":"Linuxx86_64","cookies":1,"syslang":"en-US","userlang":"en-US","cpu":"","productSub":"20030107","setTimeout":1,"setInterval":1,"plugins":{"0":"ChromePDFViewer","1":"ShockwaveFlash","2":"WidevineContentDecryptionModule","3":"NativeClient","4":"ChromePDFViewer"},"mimeTypes":{"0":"application/pdf","1":"ShockwaveFlashapplication/x-shockwave-flash","2":"FutureSplashPlayerapplication/futuresplash","3":"WidevineContentDecryptionModuleapplication/x-ppapi-widevine-cdm","4":"NativeClientExecutableapplication/x-nacl","5":"PortableNativeClientExecutableapplication/x-pnacl","6":"PortableDocumentFormatapplication/x-google-chrome-pdf"},"screen":{"width":1600,"height":900,"colorDepth":24},"fonts":{"0":"monospace","1":"DejaVuSerif","2":"Georgia","3":"DejaVuSans","4":"TrebuchetMS","5":"Verdana","6":"AndaleMono","7":"DejaVuSansMono","8":"LiberationMono","9":"NimbusMonoL","10":"CourierNew","11":"Courier"}}
μ λ λκ³Ό ν¬λ‘¬μμ λμΌ
νΈμ§νλ€:
VPNμ μΌνμ©μΌλ‘ μλνμ§λ§ 첫 νμ΄μ§λ₯Όλ‘λ ν νμ κ°μ§λ©λλ€. λΆλͺ ν μ λ λμ κ°μ§νκΈ° μν΄ μΌλΆ μλ° μ€ν¬λ¦½νΈκ° μ€ν μ€μ λλ€.
λ΅λ³
Mac μ¬μ©μμ κ²½μ°
cdc_Vim λλ Perlμ μ¬μ©νμ¬ λ³μ λ°κΎΈκΈ°
λΉμ μ μ¬μ©ν μ μμ΅λλ€ vim, λλ @Vic Seedoubleyewμ΄ Erti β ν¬λ¦¬μ€ Eelmaa @μ μν΄μ΄ μ§λ¬Έμ λν΄ μ§μ λλ‘ perlμ κ΅μ²΄ cdc_μ λ³μ chromedriver( Erti β ν¬λ¦¬μ€ Eelmaa λ κ·Έ λ³μμ λν μμΈν λ΄μ©μ @μ μν΄ μ°Έμ‘° κ²μλ¬Όμ ). μ¬μ© vimλλ perlμμ€ μ½λλ₯Ό μ»΄νμΌ λλ ν₯μ€ νΈμ§κΈ°λ₯Ό μ¬μ© ν νμκ° μμ΅λλ€. μλ³Έ chromedriverμ νΈμ§νκΈ° μ μ μ¬λ³Έμ λ§λ€μ΄ λμμμ€. λν μλ λ°©λ²μ ν
μ€νΈνμ΅λλ€ chromedriver version 2.41.578706.
Vim μ¬μ©
vim /path/to/chromedriver
μμ μ€μ μ€ννλ©΄ μλ§λ λ§μ ν‘μ€μμ€μ λ³΄κ² λ κ²μ λλ€. λ€μμ μννμμμ€.
cdc_μ μ λ ₯νκ³ μ/cdc_λλ¬ κ²μνμμμ€return.- λ₯Ό λλ¬ νΈμ§μ νμ±ννμμμ€
a. - κΈμ‘μ
$cdc_lasutopfhvcZLmcflμμ νκ³ μμ λ λ΄μ©μ κ°μ μμ λ¬Έμλ‘ λ°κΏλλ€. κ·Έλ μ§ μμΌλ©΄chromedriverμ€ν¨ν©λλ€. - νΈμ§μ΄ λλλ©΄λ₯Ό λλ¦
λλ€
esc. - λ³κ²½ μ¬νμ μ μ₯νκ³ μ’
λ£νλ €λ©΄μ μ
λ ₯νκ³ μ
:wq!λλ₯΄μμμ€return. - λ³κ²½ μ¬νμ μ μ₯νμ§ μκ³ μ’
λ£νλ €λ©΄μ μ
λ ₯νκ³ μ
:q!λλ¦ λλ€return. - λλ¬μ΅λλ€.
λ³κ²½λ κ²μΌλ‘ μ΄λνμ¬ chromedriverλ λ² ν΄λ¦νμμμ€. terminalμ°½μ΄ μ΄λ¦½λλ€. killedμΆλ ₯μ νμλμ§ μμΌλ©΄ λλΌμ΄λ²λ₯Ό μ±κ³΅μ μΌλ‘ λ³κ²½ ν κ²μ
λλ€.
ν μ¬μ©νκΈ°
μ λ체 μλμ λΌμΈ cdc_μ κ°μ§ dog_:
perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
λ체 λ¬Έμμ΄μ΄ κ²μ λ¬Έμμ΄κ³Ό λμΌν μμ λ¬Έμλ₯Ό κ°λμ§ νμΈνμμμ€ chromedriver. κ·Έλ μ§ μμΌλ©΄ μ€ν¨ν©λλ€.
ν μ€λͺ
s///g μ λ¬Έμμ΄μ κ²μνμ¬ μ 체μ μΌλ‘ λ€λ₯Έ λ¬Έμμ΄λ‘ κ΅μ²΄ ν¨μ λνλ
λλ€ (λͺ¨λ νλͺ©μ λ체 ν¨).
μλ₯Ό λ€μ΄
s/string/replacment/g
κ·Έλμ,
s///λ¬Έμμ΄ κ²μ λ° κ΅μ²΄λ₯Ό λνλ λλ€.
cdc_κ²μ λ¬Έμμ΄μ λλ€.
dog_κ΅μ²΄ λ¬Έμμ΄μ λλ€.
gλ¬Έμμ΄μ λͺ¨λ λ°μμ λ체νλ μ μ ν€μ λλ€.
Perl κ΅μ²΄κ° μλνλμ§ νμΈνλ λ°©λ²
λ€μ μ€μ λͺ¨λ κ²μ λ¬Έμμ΄μ μΈμν©λλ€ cdc_.
perl -ne 'while(/cdc_/g){print "$&\n";}' /path/to/chromedriver
μ΄κ²μ΄ μ무κ²λ λ°νλμ§ μμΌλ©΄ cdc_κ΅μ²΄ λ κ²μ
λλ€.
λ°λλ‘ λ€μμ μ¬μ©ν μ μμ΅λλ€.
perl -ne 'while(/dog_/g){print "$&\n";}' /path/to/chromedriver
λ체 λ¬Έμμ΄ dog_μ΄ μ΄μ chromedriverλ°μ΄λ리 μ μλμ§ νμΈνμμμ€ . μ΄ κ²½μ° κ΅μ²΄ λ¬Έμμ΄μ΄ μ½μμ μΈμλ©λλ€.
λ³κ²½λ κ²μΌλ‘ μ΄λνμ¬ chromedriverλ λ² ν΄λ¦νμμμ€. terminalμ°½μ΄ μ΄λ¦½λλ€. killedμΆλ ₯μ νμλμ§ μμΌλ©΄ λλΌμ΄λ²λ₯Ό μ±κ³΅μ μΌλ‘ λ³κ²½ ν κ²μ
λλ€.
λ§λ¬΄λ¦¬
chromedriverμ΄μ§μ λ³κ²½ ν ν λ³κ²½λ chromedriverμ΄μ§ μ μ΄λ¦ μ΄ chromedriverμ΄κ³ μλ³Έ μ΄μ§μ΄ μλ μμΉμμ μ΄λνκ±°λ μ΄λ¦μ΄ λ°λ μλμ§ νμΈνμμμ€.
μ΄ λ°©λ²μ λν λμ κ²½ν
μ΄μ μ μΉ μ¬μ΄νΈμμ λ‘κ·ΈμΈμ μλνλ λμ κ°μ§λμμ§λ§ cdc_λμΌν ν¬κΈ°μ λ¬Έμμ΄λ‘ κ΅μ²΄ ν ν λ‘κ·ΈμΈ ν μμμμ΅λλ€. λ€λ₯Έ μ¬λλ€μ΄ λ§νλ―μ΄ μ΄λ―Έ κ°μ§ λ κ²½μ° μ΄ λ°©λ²μ μ¬μ©ν νμλ λ€λ₯Έ λ§μ μ΄μ κ° μμ΅λλ€. λ°λΌμ VPN, λ€λ₯Έ λ€νΈμν¬ λλ μμ μ΄μλ κ²μ μ¬μ©νμ¬ νμ§ ν μ¬μ΄νΈμ μ‘μΈμ€ν΄μΌ ν μλ μμ΅λλ€.
λ΅λ³
κΈ°λ³Έμ μΌλ‘ μ
λ λ κ°μ§ κΈ°λ₯μ μ
λ λμΌλ‘ μ€νλ λ λνλλ 미리 μ μ λ μλ° μ€ν¬λ¦½νΈ λ³μλ₯Ό ν
μ€νΈνλ κ²μ
λλ€. λ΄ κ²μ μ€ν¬λ¦½νΈλ μΌλ°μ μΌλ‘ μ΄λ€ λ¨μ΄λ₯Ό ν¬ν¨νλ (μ°½ κ°μ²΄)μ λ³μμμμ βμ
λ λβ/ βwebdriverβ, λνλΌλ λ¬Έμ λ³μ λͺ¨μ $cdc_κ³Ό $wdc_. λ¬Όλ‘ ,μ΄ λͺ¨λ κ²μ μ¬μ©μ€μΈ λΈλΌμ°μ μ λ°λΌ λ€λ¦
λλ€. λͺ¨λ λ€λ₯Έ λΈλΌμ°μ λ λ€λ₯Έ κ²μ λ
ΈμΆμν΅λλ€.
λλ₯Ό μν΄, λλ, κ·Έλμ ν¬λ‘¬μ μ¬μ© λλνλ€λ κ²μ λͺ¨λ ν κ·Έ 보μ₯νλ κ²μ΄μλ€ $cdc_λ¬Έμ λ³μλ‘ λ μ΄μ μ‘΄μ¬νμ§ μκ³ μ§μ (λ€μ΄λ‘λ chromedriver μμ€ μ½λ μμ chromedriver μ¬ μ»΄νμΌ $cdc_λ€λ₯Έ μ΄λ¦.)
μ΄κ²μ chromedriverμμ μμ ν κΈ°λ₯μ λλ€.
call_function.js :
function getPageCache(opt_doc) {
var doc = opt_doc || document;
//var key = '$cdc_asdjflasutopfhvcZLmcfl_';
var key = 'randomblabla_';
if (!(key in doc))
doc[key] = new Cache();
return doc[key];
}
(λͺ¨λ λ΄κ° μ€μ ν μ£Όμμ μ°Έκ³ $cdc_μ randomblabla_.
λ€μμ λ΄ λ€νΈμν¬κ° μ¬μ©ν μμλ κΈ°μ μ€ μΌλΆλ₯Ό 보μ¬μ£Όλ μμ¬ μ½λμ λλ€.
runBotDetection = function () {
var documentDetectionKeys = [
"__webdriver_evaluate",
"__selenium_evaluate",
"__webdriver_script_function",
"__webdriver_script_func",
"__webdriver_script_fn",
"__fxdriver_evaluate",
"__driver_unwrapped",
"__webdriver_unwrapped",
"__driver_evaluate",
"__selenium_unwrapped",
"__fxdriver_unwrapped",
];
var windowDetectionKeys = [
"_phantom",
"__nightmare",
"_selenium",
"callPhantom",
"callSelenium",
"_Selenium_IDE_Recorder",
];
for (const windowDetectionKey in windowDetectionKeys) {
const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];
if (window[windowDetectionKeyValue]) {
return true;
}
};
for (const documentDetectionKey in documentDetectionKeys) {
const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];
if (window['document'][documentDetectionKeyValue]) {
return true;
}
};
for (const documentKey in window['document']) {
if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {
return true;
}
}
if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;
if (window['document']['documentElement']['getAttribute']('selenium')) return true;
if (window['document']['documentElement']['getAttribute']('webdriver')) return true;
if (window['document']['documentElement']['getAttribute']('driver')) return true;
return false;
};
μ¬μ©μ @szxμ λ°λ₯΄λ©΄ 16 μ§ νΈμ§κΈ°μμ chromedriver.exeλ₯Ό μ΄κ³ μ€μ λ‘ μ»΄νμΌνμ§ μκ³ μλμΌλ‘ κ΅μ²΄λ₯Ό μν ν μλ μμ΅λλ€.
λ΅λ³
μ°λ¦¬κ° μ΄λ―Έ μ§λ¬Έκ³Ό κ²μ λ λ΅λ³μμ μμ λΈ κ²μ²λΌ, μΉ μ€ν¬λν λ°©μ§ λ° βDistil Networksβ λΌλ λ΄ νμ§ μλΉμ€κ° μ¬κΈ°μ μμ΅λλ€. κ·Έλ¦¬κ³ νμ¬ CEOμ μΈν°λ·° μ λ°λ₯΄λ©΄ :
μλ‘μ΄ λ΄μ λ§λ€ μλ μμ§λ§ Seleniumμ μ¬μ©μ€μΈ λκ΅¬λ‘ μλ³ ν μμλ λ°©λ²μ μ°Ύμμ ν΄λΉ λ΄μμ λ°λ³΅λλ νμμ κ΄κ³μμ΄ Seleniumμ μ°¨λ¨νκ³ μμ΅λλ€ . μ°λ¦¬λ μ§κΈ νμ΄μ¬κ³Ό λ§μ λ€λ₯Έ κΈ°μ λ‘ κ·Έλ κ²νκ³ μμ΅λλ€. ν μ νμ λ΄μμ ν¨ν΄μ΄ λ±μ₯νλ©΄ μ¬μ©νλ κΈ°μ μ 리λ²μ€ μμ§λμ΄λ§νμ¬ μ μμ μΈ κ²μΌλ‘ μλ³ν©λλ€.
κ·Έλ€μ΄ μ΄λ»κ² Seleniumμ μ ννκ² κ°μ§νλμ§ μ΄ν΄νλ €λ©΄ μκ°κ³Ό μΆκ° κ³Όμ κ° νμνμ§λ§, μ§κΈ μ°λ¦¬κ° λ§ν μμλ κ²μ 무μμ λκΉ?
- κ·Έκ²μ μ λ λμΌλ‘ μ·¨ν νλκ³Ό κ΄λ ¨μ΄ μμ΅λλ€. μΌλ¨ μ¬μ΄νΈλ₯Ό νμνλ©΄ μ¦μ κ°μ§λμ΄ κΈμ§λ©λλ€. μ‘μ μ¬μ΄μ μΈμμ μΈ λ¬΄μμ μ§μ°μ μΆκ°νλ €κ³ νμ΅λλ€. νμ΄μ§κ°λ‘λ λ ν μΌμ μ€μ§νμμμ€.
- λΈλΌμ°μ μ§λ¬Έμ κ΄ν κ²μ΄ μλλλ€. μν¬λ¦Ώ λͺ¨λκ° μλ κΉλν νλ‘νμΌλ‘ μ¬λ¬ λΈλΌμ°μ μμ μλν΄λ³΄μμμ€. λμμ΄λμ§ μμμ΅λλ€.
- μΈν°λ·°μ ννΈμ λ°λ₯΄λ©΄, μ΄κ²μ βμ μμ§λμ΄λ§βμ΄μκΈ° λλ¬Έμ λΈλΌμ°μ μμ μΌλΆ JS μ½λκ° μ€νλμ΄ μ λ λ μΉ λλΌμ΄λ²λ₯Ό ν΅ν΄ μλν λ λΈλΌμ°μ μμ μ μ μμ΅λλ€.
λͺ ννκ² λ΅λ³μΌλ‘ κ²μνκΈ°λ‘ κ²°μ νμ΅λλ€.
ν¬λ‘¬ λλΌμ΄λ²μ ν¨κ» μ λ λμ μ¬μ©ν λ μΉ μ¬μ΄νΈμμ κ°μ§ ν μ μμ΅λκΉ?
μ.
λν μ€ννμ§ μμ κ²μ μ΄μ μ λ λ λ° μ΄μ λΈλΌμ°μ λ²μ μ λλ€. μ΄λ‘ μ μΌλ‘ Distil Networks λ΄ κ°μ§κΈ°κ° νμ¬ μμ‘΄νκ³ μλ νΉμ μμ μμ μ λ λμ ꡬν / μΆκ° λ κ²μ΄μμ μ μμ΅λλ€. κ·Έλ λ€λ©΄μ΄ κ²½μ° κ΄λ ¨ λ³κ²½μ΄ λ°μν μ§μ / λ²μ μ κ°μ§νκ³ (κ²μΆκΈ°λ₯Ό κ°μ§νμ) λ³κ²½ λ‘κ·Έ λ° λ³κ²½ μΈνΈλ₯Ό μ΄ν΄λ³Ό μ μμ΅λλ€. μΉ λλΌμ΄λ² κΈ°λ° λΈλΌμ°μ λ₯Ό νμ§νλ λ° μ¬μ©λλ κΈ°λ₯μ 무μμ λκΉ? ν μ€νΈν΄μΌ ν μ΄λ‘ μΌλΏμ λλ€.
λ΅λ³
wellsfargo.comμμ ꡬνλλ μ :
try {
if (window.document.documentElement.getAttribute("webdriver")) return !+[]
} catch (IDLMrxxel) {}
try {
if ("_Selenium_IDE_Recorder" in window) return !+""
} catch (KknKsUayS) {}
try {
if ("__webdriver_script_fn" in document) return !+""
λ΅λ³
λλ ν λ JavaScript κ²°κ³Ό
ν¬λ‘¬ λλΌμ΄λ² μμ€ μ½λλ₯Ό νμΈνμ΅λλ€. λΈλΌμ°μ μ μΌλΆ μλ° μ€ν¬λ¦½νΈ νμΌμ΄ μ½μ
λ©λλ€.
μ΄ λ§ν¬μ λͺ¨λ μλ° μ€ν¬λ¦½νΈ νμΌμ
https://chromium.googlesource.com/chromium/src/+/master/chrome/test/chromedriver/js/ μΉ νμ΄μ§μ μ½μ
λ©λλ€.
κ·Έλμ 리λ²μ€ μμ§λμ΄λ§μ μ¬μ© νκ³ 16 μ§μ νΈμ§μΌλ‘ js νμΌμ λλ
ν νμ΅λλ€. μ΄μ λ λ μ΄μ μλ° μ€ν¬λ¦½νΈ λ³μ, ν¨μ μ΄λ¦ λ° κ³ μ λ¬Έμμ΄μ΄ μ
λ λ νλμ λ°κ²¬νλ λ° μ¬μ©λμ§ μμλ€κ³ νμ νμ΅λλ€. κ·Έλ¬λ μ¬μ ν μΌλΆ μ¬μ΄νΈμ reCaptchaλ μ
λ λμ κ°μ§ν©λλ€!
μ΄μ©λ©΄ κ·Έλ€μ chromedriver js μ€νμΌλ‘ μΈν μμ μ¬νμ νμΈν©λλ€ π
νΈμ§ 1 :
Chrome βλ€λΉκ²μ΄ν°βλ§€κ° λ³μ μμ
βλ€λΉκ²μ΄ν°βμ chromedriverλ₯Ό μ¬μ©νμ¬ κ°λ¨ν μμλ΄λ λͺ κ°μ§ λ§€κ° λ³μκ° μμμ λ°κ²¬νμ΅λλ€. λ§€κ° λ³μλ λ€μκ³Ό κ°μ΅λλ€.
- βnavigator.webdriverβ μλνλμ§ μμ λͺ¨λμμλ βμ μλμ§ μμβμ λλ€. μλ λͺ¨λμμλ βtrueβμ λλ€.
- βnavigator.pluginsβ ν€λλ¦¬μ€ ν¬λ‘¬μ κΈΈμ΄λ 0μ λλ€. νλ¬κ·ΈμΈ κΈΈμ΄ νμΈ νλ‘μΈμ€λ₯Ό μμ΄κΈ° μν΄ κ°μ§ μμλ₯Ό μΆκ°νμ΅λλ€.
- β navigator.languagesβ λ κΈ°λ³Έ ν¬λ‘¬ κ° β[ βen-USβ, βenβ, βesβ]βλ‘ μ€μ λμμ΅λλ€.
κ·Έλμ λ΄κ° νμν κ²μ μΉ νμ΄μ§μμ μλ° μ€ν¬λ¦½νΈλ₯Ό μ€ννλ ν¬λ‘¬ νμ₯ νλ‘κ·Έλ¨μ΄μμ΅λλ€. κΈ°μ¬μ μ 곡λ js μ½λ λ‘ νμ₯ μ λ§λ€κ³ λ€λ₯Έ κΈ°μ¬ λ₯Ό μ¬μ© νμ¬ μμΆ νμ₯μλ₯Ό λ΄ νλ‘μ νΈμ μΆκ°νμ΅λλ€. κ°μ μ±κ³΅μ μΌλ‘ λ³κ²½νμ΅λλ€. κ·Έλ¬λ μ¬μ ν μ무κ²λ λ°λμ§ μμμ΅λλ€!
λλ μ΄μ κ°μ λ€λ₯Έ λ³μλ₯Ό μ°Ύμ§ λͺ»νμ§λ§ κ·Έκ²μ΄ μ‘΄μ¬νμ§ μλλ€λ κ²μ μλ―Ένμ§λ μμ΅λλ€. μ¬μ ν reCaptchaλ Chromedriverλ₯Ό κ°μ§νλ―λ‘ λ λ§μ λ³μλ₯Ό λ³κ²½ν΄μΌν©λλ€. λ€μ λ¨κ³λ λ΄κ° μνλνμ§ μλ κ²μ΄ κ²μΆκΈ° μλΉμ€μ 리λ²μ€ μμ§λμ΄λ§ν΄μΌνλ€.
μ΄μ μ΄ μλν νλ‘μΈμ€μ λ λ§μ μκ°μ 보λ΄κ±°λ λ€λ₯Έ λ°©λ²μ μ°Ύμ λ³Ό κ°μΉκ° μμ΅λλ€!
λ΅λ³
ν¬λ‘¬μ νΉμ μ¬μ©μ νλ‘νκ³Ό ν¨κ» μ λ λμ μ¬μ©νμμμ€. κ·Έλ¬λ©΄ νΉμ μ¬μ©μλ‘ μ¬μ©νκ³ μνλ κ²μ μ μ ν μ μμ΅λλ€. κ·Έλ κ²νλ©΄ βμ€μ βμ¬μ©μλ‘ μ€νλλ©° μΌλΆ νλ‘μΈμ€ νμκΈ°μμ ν¬λ‘¬ νλ‘μΈμ€λ₯Όλ³΄κ³ νκ·Έμμ μ°¨μ΄μ μ λ³Ό μ μμ΅λλ€.
μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€.
username = os.getenv("USERNAME")
userProfile = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default"
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir={}".format(userProfile))
# add here any tag you want.
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
chromedriver = "C:\Python27\chromedriver\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)
ν¬λ‘¬ νκ·Έ λͺ©λ‘μ μ¬κΈ°
λ΅λ³
partial interface Navigator {
readonly attribute boolean webdriver;
};Navigator μΈν°νμ΄μ€μ webdriver IDL μμ±μ webdriver-active νλκ·Έμ κ°μ 리ν΄ν΄μΌν©λλ€. μ΄κΈ° κ°μ falseμ λλ€.
μ΄ μμ±μ ν΅ν΄ μΉ μ¬μ΄νΈλ WebDriverκ° μ¬μ©μ μμ΄μ νΈλ₯Ό μ μ΄νκ³ μμμ νμΈνκ³ μλΉμ€ κ±°λΆ κ³΅κ²©μ μννλ λ° μ¬μ©ν μ μμ΅λλ€.
2017 W3C Editorμ WebDriver μ΄μ μμ μ§μ κ°μ Έμ¨ κ² μ λλ€. μ΄κ²μ μ΅μν μ λ λ λλΌμ΄λ²μ ν₯ν λ°λ³΅μ΄ μ€μ©μ λ°©μ§νκΈ° μν΄ μλ³ λ μ μμμ μλ―Έν©λλ€. κΆκ·Ήμ μΌλ‘ μμ€ μ½λκ° μμΌλ©΄ ν¬λ‘¬ λλΌμ΄λ²λ₯Ό μ ννκ² κ°μ§ ν μμλ μμΈμ νμ νκΈ°κ° μ΄λ ΅μ΅λλ€.