1<!DOCTYPE html> 2<html lang="en"> 3<head><meta charset="utf-8"><link rel="preload" as="font" type="font/woff2" href="/_fonts/5OTXZ4M8NqKHmf3vznUpTBulrQMATUZV6lUfBehj6Rw-HxPzBaDMYcoM_heoB9jDgrgSWq2QeXBEKwaFv3-0drg.woff2" crossorigin> 4<meta name="viewport" content="width=device-width, initial-scale=1"> 5<title>How to use the Anti-Captcha plugin in Puppeteer or Selenium</title> 6<link rel="alternate" hreflang="en" href="https://anti-captcha.com/apidoc/articles/how-to-integrate-the-plugin"> 7<link rel="alternate" hreflang="x-default" href="https://anti-captcha.com/apidoc/articles/how-to-integrate-the-plugin"> 8<link rel="alternate" hreflang="sv" href="https://anti-captcha.com/sv/apidoc/articles/how-to-integrate-the-plugin"> 9<link rel="alternate" hreflang="pt" href="https://anti-captcha.com/pt/apidoc/articles/how-to-integrate-the-plugin"> 10<link rel="alternate" hreflang="fr" href="https://anti-captcha.com/fr/apidoc/articles/how-to-integrate-the-plugin"> 11<link rel="alternate" hreflang="nl" href="https://anti-captcha.com/nl/apidoc/articles/how-to-integrate-the-plugin"> 12<link rel="alternate" hreflang="es" href="https://anti-captcha.com/es/apidoc/articles/how-to-integrate-the-plugin"> 13<link rel="alternate" hreflang="de" href="https://anti-captcha.com/de/apidoc/articles/how-to-integrate-the-plugin"> 14<link rel="alternate" hreflang="it" href="https://anti-captcha.com/it/apidoc/articles/how-to-integrate-the-plugin"> 15<link rel="alternate" hreflang="pl" href="https://anti-captcha.com/pl/apidoc/articles/how-to-integrate-the-plugin"> 16<link rel="alternate" hreflang="uk" href="https://anti-captcha.com/uk/apidoc/articles/how-to-integrate-the-plugin"> 17<link rel="alternate" hreflang="ru" href="https://anti-captcha.com/ru/apidoc/articles/how-to-integrate-the-plugin"> 18<link rel="alternate" hreflang="tr" href="https://anti-captcha.com/tr/apidoc/articles/how-to-integrate-the-plugin"> 19<link rel="alternate" hreflang="ar" href="https://anti-captcha.com/ar/apidoc/articles/how-to-integrate-the-plugin"> 20<link rel="alternate" hreflang="fa" href="https://anti-captcha.com/fa/apidoc/articles/how-to-integrate-the-plugin"> 21<link rel="alternate" hreflang="ur" href="https://anti-captcha.com/ur/apidoc/articles/how-to-integrate-the-plugin"> 22<link rel="alternate" hreflang="hi" href="https://anti-captcha.com/hi/apidoc/articles/how-to-integrate-the-plugin"> 23<link rel="alternate" hreflang="bn" href="https://anti-captcha.com/bn/apidoc/articles/how-to-integrate-the-plugin"> 24<link rel="alternate" hreflang="vi" href="https://anti-captcha.com/vi/apidoc/articles/how-to-integrate-the-plugin"> 25<link rel="alternate" hreflang="th" href="https://anti-captcha.com/th/apidoc/articles/how-to-integrate-the-plugin"> 26<link rel="alternate" hreflang="id" href="https://anti-captcha.com/id/apidoc/articles/how-to-integrate-the-plugin"> 27<link rel="alternate" hreflang="fil" href="https://anti-captcha.com/fil/apidoc/articles/how-to-integrate-the-plugin"> 28<link rel="alternate" hreflang="zh" href="https://anti-captcha.com/zh/apidoc/articles/how-to-integrate-the-plugin"> 29<link rel="alternate" hreflang="ko" href="https://anti-captcha.com/ko/apidoc/articles/how-to-integrate-the-plugin"> 30<link rel="alternate" hreflang="ja" href="https://anti-captcha.com/ja/apidoc/articles/how-to-integrate-the-plugin"> 31<link rel="canonical" href="https://anti-captcha.com/apidoc/articles/how-to-integrate-the-plugin"> 32<meta name="language" content="English"> 33<meta property="og:locale" content="en_US"> 34<meta property="og:image" content="https://anti-captcha.com/images/og-preview.webp"> 35<meta property="og:type" content="article"> 36<style>@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/1ncK5V-Ao63zSoIyXYSVppliiHEY4-jcdrPgUa-Cse8-KToRNBvc6bTmtIHX1UKYdc1Ms6JalcJNPhry01cN9gg.woff2) format(woff2);font-display:swap;
36unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/X6obMMmogE8OjNFcgw5B6Ctfn5HFTengRSQLg3QopjI-vSImlLYzjc_94Ku7afBkFkm6ns0QuyBd0VcFbuOoyhw.woff2) format(woff2);font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/1CmaTNkB_vQFgHvcivNH32PUOlduclGJTISAkR8_2t4-bz5JkmytIbBjtTDbydcesDgeIaCOZmE6JamweR53Ko8.woff2) format(woff2);font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/p8_iMj97syiW7pNs08i7aDRTIfYXsn1aLaa2V5sHVE0-30kvGaRnl_dS_5qphm8F9WaWwKXf5ZuXk-R9UUCI5MQ.woff2) format(woff2);font-display:swap;
36unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/byHu6vCp4AwuwTuO0iQyVSYQuRWpsmQbJSU1afUFyRA-pWgEqOsXe0t46_DGNV1yRdBksk_z4LufgcYdHWce7HI.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/z_CEXUFdVdC6nIuMLjyPDa2X6euKbN3i8jr3NqKTXjI-lKbde7b9ewwj6UBrWan1Ub6HKM4eR_bLAEqh468TS0o.woff2) format(woff2);font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:"Open Sans Fallback: BlinkMacSystemFont";src:local("BlinkMacSystemFont");size-adjust:112.544%;ascent-override:94.9716%;descent-override:26.0315%;line-gap-override:0%}@font-face{font-family:"Open Sans Fallback: Segoe UI";src:local("Segoe UI");size-adjust:105.7269%;ascent-override:101.0952%;descent-override:27.71%;line-gap-override:0%}@font-face{font-family:"Open Sans Fallback: Helvetica Neue";src:local("Helvetica Neue");size-adjust:104.1667%;ascent-override:102.6094%;descent-override:28.125%;line-gap-override:0%}@font-face{font-family:"Open Sans Fallback: Arial";src:local("Arial");size-adjust:105.1479%;ascent-override:101.6519%;descent-override:27.8625%;line-gap-override:0%}@font-face{font-family:"Open Sans Fallback: Noto Sans";src:local("Noto Sans");size-adjust:98.8924%;ascent-override:108.0819%;descent-override:29.625%;line-gap-override:0%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/oi2ElsDLdSn_dVsXQXLHEYIkWffkO22Hb_Un56ori-8-TOPSmAk24DzUGbbpULinv64ZGd4oG32z5dj4RsdZQy0.woff2) format(woff2);font-display:swap;
36unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/qORAfXsQPClhWE1NxIyze-06Gm7nZywbMjQws2ULVNA-wjjXDIadeB_-nixfR_H6UV-PQk8UUDQIlvNNbuYk1-s.woff2) format(woff2);font-display:swap;unicode-range:U+1F00-1FFF;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/cVeVvUlAOwbrfJrj7_ffErX48lhVUgVmQMuxMi7S3-g-IdeUxnc5tMmgKD6Nlc8KskWiHg6cr8oNy9BZ1fIQ5vI.woff2) format(woff2);font-display:swap;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/QbnGxyU-0ZN5Y47E3afvEhnJDBpR0S0s2n3P0O-TKdE-ifIsJJMZqNvDyWu7WnPDMv8MzVnrOI8_J0Nd2LH15M0.woff2) format(woff2);font-display:swap;
36unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular Italic"),local("Open Sans Italic"),url(/_fonts/qFmcDCEqdYt4eE47FX40P7UT5A2H8kukMt0PESt9eaA-M2u67Il0JTR3DgIJlwq6M1Pm0KUHylL_fYPOpNWlVQo.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/AtEdxPQRuE3zk5bIwe-u1SbFeDxyW2ncRSEMP-2hmA8-B6hvTUV9IDqh_4AxBpzN8SccaTE8NMLPuziWauqEyaY.woff2) format(woff2);font-display:swap;unicode-range:U+1F00-1FFF;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/DfpyppQ_vN017vtsTJ9mCXr1dI9OEmcU9nXWqSWiI5c-0ST398yS9wLE0T3Vg9BjxWjcw4u_8oyDmSsXudQsQAk.woff2) format(woff2);font-display:swap;
36unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;font-weight:400;font-style:normal;font-stretch:100%}@font-face{font-family:Open Sans;src:local("Open Sans Regular"),local("Open Sans"),url(/_fonts/5OTXZ4M8NqKHmf3vznUpTBulrQMATUZV6lUfBehj6Rw-HxPzBaDMYcoM_heoB9jDgrgSWq2QeXBEKwaFv3-0drg.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal;font-stretch:100%}*{box-sizing:border-box}body{background-color:#1e2d4b;color:#000;font-family:Open Sans,"Open Sans Fallback: BlinkMacSystemFont","Open Sans Fallback: Segoe UI","Open Sans Fallback: Helvetica Neue","Open Sans Fallback: Arial","Open Sans Fallback: Noto Sans",sans-serif;margin:0;min-height:100vh;padding:0}a{color:#266bd2}a:hover{text-decoration:none}a:visited{color:#4e2186}.nowrap{white-space:nowrap}.div8{height:8px;width:8px}.tac{text-align:center}.tal{text-align:left}.w100p{width:100%}.dib{display:inline-block}.df,.hbox{display:flex}.alic{align-items:center}.gap32{gap:32px}.gap4{gap:4px}.ptop10{padding-top:10px}.arrow-up{transform:rotate(-90deg)}.dash-link{border-bottom:1px dotted;cursor:pointer;text-decoration:none}.dash-link:hover{border-bottom:0}.inp-dft-landing{background-color:#fff;border:2px solid #477ed2;border-radius:0;box-shadow:inset 0 2px 1px #0000001c;padding:8px 5px!important;transition:border-color .3s}.btn,.inp-dft-landing{font-family:Open Sans,"Open Sans Fallback: BlinkMacSystemFont","Open Sans Fallback: Segoe UI","Open Sans Fallback: Helvetica Neue","Open Sans Fallback: Arial","Open Sans Fallback: Noto Sans",sans-serif;font-size:1em;margin:0;vertical-align:middle}.btn{align-items:center;background:none;border-color:transparent;border-radius:2px;border-width:1px;cursor:pointer;display:inline-block;font-weight:600;line-height:1.2;outline:none;padding:.625em 1.25em;text-align:center;text-decoration:none;z-index:1}.btn img+.label{padding-left:4px}.btn.btn-disabled{background-color:#ccc!important;border-color:#a6a6a6!important;box-shadow:0 1px #fff;color:#999;cursor:default!important;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.btn-primary{background-color:#477ed2;border:1px solid #2d64b9;color:#fff!important}.btn-default,.btn-primary{box-shadow:inset 0 1px #ffffff80}.btn-default{background-color:#e6e6e6;border:1px solid #acacac;color:#000}.btn-cta{background-color:#f7cf1f;border-radius:8px;color:#122c3f!important;padding:10px 16px}.btn-cta:hover{background-color:#ffe77b;color:#122c3f}.margintop20{margin-top:20px!important}.table-docs{font-size:14px;font-style:normal;font-weight:400;line-height:1.4285714286;-webkit-text-decoration-skip:ink;background:#fff;border-collapse:collapse;color:#091e42;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Droid Sans,Helvetica Neue,sans-serif;margin:0;overflow-x:auto;padding:0;text-decoration-skip-ink:auto;width:auto}.table-docs th{background-color:#f0f0f0;border:1px solid #ddd;color:#172b4d;font-weight:700;padding:7px 10px;text-align:left}.rtl .table-docs th{text-align:right}.table-docs td{border:1px solid #ddd;min-width:8px;padding:7px 10px;padding-left:10px!important;vertical-align:top}.code{padding:0;width:100%}.code,.line{background:0;border:0;border-collapse:collapse;bottom:auto;box-sizing:content-box;color:#333;float:none;font-family:Consolas,Bitstream Vera Sans Mono,Courier New,Courier,monospace;font-size:14px;font-style:normal;font-weight:400;height:auto;left:auto;line-height:20px;margin:0;min-height:inherit;outline:0;overflow:visible;position:static;right:auto;text-align:left;top:auto;vertical-align:baseline}.line{background-color:#0f192a!important;padding:0 1em 0 0;white-space:nowrap;width:auto}.codeContent,.example-code{display:grid;grid-template-columns:1fr;overflow:hidden;position:relative}td>.codeContent,td>.example-code{margin-top:8px}.codeContent>div,.example-code>div{background:#282c34;border-radius:3px;overflow:auto}.exolink:after{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEnSURBVHgBtVNRTsJAEJ1Z16R/coR6g2pSQqiJegL1BOCfEUy4gXgC
36a9L67w30BNYP2oT64RU8AfsNgWG2tKSUFNoPXtLs7HTf7MzsG4QaaD1EZmYbhqEC90xhVbLTj795ucq51LGUp6JqAD58DwK7bP6lrsZ0RidJBk4vHhDCJW8aedKC5l+R33Kz/UU/HhLAcxrEIjoyRftp3AWEVyabxVsFyEmRzN+QkN4yv0TCDq/ByLOvoQR5cujZL+3HsUUCPkP//F/CHhTJ2he+N3UJd6ssa5K3y6xB1s12er+d/LnSEohALZAGkddcN4ybfcN/tPWxN8DIt12ogMpCOlwArkhBQYF1wEKCH27ObTosu6AvsYCSeVgjmQUt51SRpdCZElCw8SqMJdwOcXNIxKwlAAAAAElFTkSuQmCC);margin-left:4px;vertical-align:middle}.page-content h1{font-size:24px}.page-content h2{color:#555;font-size:20px}.page-content h3{color:#555;font-size:16px;font-weight:700;margin-bottom:8px}.page-content h3+p{margin-top:0}.faq-list .desc code{background-color:#c8e2f1;border-radius:3px;box-shadow:0 .7px .5px #72a6c3;display:block;font-family:monospace;font-size:14px;line-height:1.4;padding:8px}.item .desc img{max-width:100%}.btn .icon{fill:currentColor;transition:fill .2s;vertical-align:text-top}.btn .label{vertical-align:middle}.btn .icon+.label{margin-left:3px}.btn.small{font-size:.75rem;padding:3px 6px}svg.icon{display:inline-block;fill:currentColor;height:1.5em;vertical-align:middle;width:1.5em}svg.icon.db{display:block}svg.icon.w100p{height:auto;width:100%}svg.icon.arrow-left{transform:scaleX(-1)}svg.icon.arrow-top{transform:rotate(-90deg)}svg.icon.arrow-bottom{transform:rotate(90deg)}svg.icon.thumb-up{transform:scaleY(-1)}svg.icon.icon-16{height:16px;width:16px}.rtl .pop4+div,.rtl .poplayer,.rtl .tablos{direction:ltr}.rtl{direction:rtl}.rtl .hero-right img{transform:scaleX(-1) translate(-50px)}.rtl .menu .menu-icon{margin-left:8px;margin-right:0}.rtl .check-wrap label .faked-control{margin-left:.25rem;margin-right:0}.rtl .your-captchas .filters .title>:first-child{margin-left:10px;margin-right:0}.rtl .feature-title:before{margin-left:0;margin-right:-40px}.rtl .searchbar-wrap label .icon{left:auto;right:6px}.rtl .heroimg{margin-right:0!important}.rtl .login-button:before{margin:0 0 0 10px!important;position:static!important;vertical-align:middle}.rtl .docs-content .page-content{border-radius:8px 0 0 8px}.rtl .docs-content .pages-list{border-radius:0 8px 8px 0}.rtl .docs-content .grid .col-left{padding-right:16px}.lp-wrap{background-color:#1e2d4b;color:#fff;min-height:100vh;overflow:hidden}.lp-wrap a{color:#5491e3}.error-msg{color:#fff;font-size:12px;padding:0 4px 2px} 37</style><link rel="stylesheet" href="/_nuxt/entry.9827f5b6.css" type="text/x-inlined"> 38<style>.tutorial-link{margin:-10px 0 10px}.subfolder{padding-left:15px;padding-top:8px}.ptop10{padding-top:10px}.table-grid{display:table}.table-cell{display:table-cell}.mobile-apidoc-menu{display:none;margin-bottom:16px}.mobile-apidoc-menu .col-icon img{width:30px}.method-link{font-size:16px}.example{padding:30px 0}.example:last-child{border-radius:0 0 5px 5px}.example:nth-child(2){border-top:1px solid #ccc}.example-title{color:#666;font-size:22px;margin-bottom:25px;position:relative;text-align:center;z-index:1}.example-title select{font-size:18px;vertical-align:middle}.example-title .method-highlight{color:#000}.method-description{color:#666;flex:1;font-size:14px;margin-bottom:20px;padding:0 60px;text-align:left}.example-content{padding:0 30px;position:relative}.example-content .method-arrow{bottom:48px;left:50%;margin-left:-140px;position:absolute}.example-content .code-side-icon img{vertical-align:middle}.example-content .side-label{display:inline-block;vertical-align:middle}.example-content .code-pointer{align-self:center;margin-bottom:-16px;vertical-align:middle}.example-content .api-response,.example-content .app-request{flex-direction:column;justify-content:flex-end;margin:0 30px}.example-content .app-request .code-side-icon{margin-left:10px}.example-content .app-request .code-pointer{margin-left:17px}.example-content .api-response{margin-top:50px;text-align:right}.example-content .api-response .code-side-icon{margin-right:10px}.example-content .api-response .code-pointer{margin-right:17px}.example-code{background-color:#282c34;border-radius:5px;color:#fff;font-size:12px;margin-top:-5px;overflow:auto;text-align:left;white-space:nowrap}.apidoc-footer{height:300px;margin-top:-137px}.streaks{left:50%;position:absolute;transform:translate(-50%);width:1695px}.docs-content{display:flex;margin:32px auto 0;max-width:1400px;min-height:calc(100vh - 148px);position:relative;z-index:2}.docs-content .head{color:#fff;padding:16px 24px}.col-pages-list{display:flex;flex-basis:340px;flex-direction:column;flex-shrink:0}.col-pages-list .head{background-color:#4567a6;border-radius:10px 0 0}.col-page-content{display:flex;flex:1;flex-direction:column}.col-page-content .head{background-color:#335c99;border-radius:0 10px 0 0}.col-page-content .head a{color:#fff}.pages-list{background-color:#dcdee0;border-radius:8px 0 0 8px;flex:1;padding:16px 24px}.page-folder{font-size:18px;margin-bottom:4px;margin-top:24px}.page-folder:first-child{margin-top:0}.page-content{background-color:#ebedf0;border-radius:0 8px 8px 0;flex:1;padding:16px 24px}.documentation,.faq,.impaired,.tutorials{background-image:url(/_nuxt/isogrid-pattern.fa1d7cb7.png),linear-gradient(153.31deg,#223e67 1.83%,#14243b 71.58%,#203b62);min-height:100vh;position:relative}.github{color:#fff;display:flex;font-size:14px;justify-content:center;margin:30px auto}.github .inner{align-items:center;background-color:#335c99;border:2px solid #fff;border-radius:4px;display:flex;padding:14px 16px}.github a{color:#fff;margin-left:16px}.github .col-icon{margin-right:8px}.github img{vertical-align:middle}.github span{font-size:16px;font-weight:700}.mobile-close{display:none}@media (max-width:732px){.col-page-content{background-color:#ebedf0;overflow:auto}.mobile-apidoc-menu{align-items:center;background:#335c99;border-radius:4px;color:#fff;display:inline-flex;padding:4px 16px 4px 8px}.mobile-apidoc-menu .col-icon{margin-right:8px}.mobile-apidoc-menu img{vertical-align:middle}.docs-content{margin:50px 0}.col-pages-list{position:absolute;transform:translate(-100%);transition:transform .2s;z-index:2}.col-pages-list.active{transform:translate(0)}.col-pages-list .mobile-close{display:block;padding:16px;position:absolute;right:20px;top:0}.col-pages-list .mobile-close img{width:30px}.pages-list{border-radius:0 0 8px;box-shadow:0 6px 20px #00000012;position:relative}.page-content{border-radius:0}}@media (max-width:740px){.page-content{padding:16px 8px}h1{font-size:24px}.example-content .api-response,.example-content .app-request{margin:24px 0 0}.example-content .example-code{max-width:calc(100vw - 48px)}.example-content,.method-description{padding-left:0;padding-right:0}.example-content .app-request{margin-left:0;margin-right:0}} 39</style><link rel="stylesheet" href="/_nuxt/default.002852db.css" type="text/x-inlined"> 40<style>.login-item[data-v-4f26d3f8]{color:#6ac9ff!important;
40max-width:200px;overflow:hidden}.mobilemenu[data-v-4f26d3f8]{display:none}@media (max-width:830px){.mobilemenu[data-v-4f26d3f8]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIHSURBVHgB7ZmBdcIgEIYvnUA3wA0cwW7QDUwnqBuYDeoIblIncITGCawThEI9+yg9yEWTSOJ97/HCg/8C/wNOXgQQBEEQBEEQBKEX9H8WjJjcD/L6M30dFXQNMegHI6ZMxfAT3M7CDLwKdZq+tXkoSIQMGuKvDnIyZZZl2cnTKvMoqfcYbebobP2a7anNa9pYtMgIYQpCuw2JYSjoOMrRzWNCuBNtbekLO7PFnlFnt7IKCe+1pdvY/zunbhOYLTn8NbuFRGhjhe2Kuj9NB3wqp20GXvIabNLCtk3kuG5Ccc47h3PxwLaJKV/EhEqNiYyKGwShiZtqQRhe1sX1zc1n2DuLbmY+mK4ZM25QWdrl1akXkCCtrvC1cUNeYUEQHhR9vm1xEyBb69M4aRGXi4Jzj4hdPJwsXWF3FXhHhrEX7V2+abFM1xn2uqOG63StosNETY/RcNT0WA0HTY/J8JFjekyG5xzTozGMbbWmqbimRnQqhrH9xU6AMJ1bWSguZETTeSAdw9iX67DppoYnnsaWaVKGIW66znDpSX6Og1OsZuVp9tA1sYk3Me3pqW9iFRqcYqH636FrYhP3dKuGhq2po+ZjtQq6JjZxQltwDKOWfRxQ8wZ9UDdxQk+aDmgvpj8jRu3KLqEvcNDfwowpuHFoWunzvxl7x6Str7WXvQVBEARBEARB6IdviYVHKrBYiTwAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;background-size:30px 30px;display:block;height:30px;width:30px}.mobmenu-wrap[data-v-4f26d3f8]{background:#111d35;border-radius:8px;box-shadow:0 16px 20px #0006;display:none;left:0;padding:8px 0;position:absolute;right:0;text-align:left;top:65px}.mobmenu-wrap.active[data-v-4f26d3f8],.nav-item[data-v-4f26d3f8]{display:block}.nav-item[data-v-4f26d3f8]{color:#fff;font-size:18px;padding:16px;text-decoration:none}}.login-item[data-v-69e3e417]{color:#6ac9ff!important;max-width:200px;overflow:hidden}.logout[data-v-69e3e417]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAABGdBTUEAALGPC/xhBQAAAJlJREFUOBGtlNENgCAMRIkfbsBUbuIkDugKuka9E0qCsQWiTS5ouT5qrAYRmaENOiEzgheoIqAZHiOgWjtYXKO3qS14Ht2Dd4Wi3pe1F5IBtO9QDWKWUajGBSwRIoBRg1KuDSEb3neQBdF8Y707mozux9J6Uk8VvGOP84SaABp7O4GPM8Ko38wIJHvNYTvSAfJp7H/5AD//Ci6yz5S8COM38wAAAABJRU5ErkJggg==);background-position:50%;background-repeat:no-repeat;background-size:15px 15px;cursor:pointer;display:block;height:15px;width:15px}.nav-header-wrap[data-v-69e3e417]{padding-top:22px}.nav-header[data-v-69e3e417]{align-items:center;background-color:#111d35;border-radius:8px;display:flex;font-size:18px;justify-content:space-between;margin:0 28px;padding:16px 28px;position:relative;z-index:11}.nav-header img[data-v-69e3e417]{vertical-align:middle}.nav-item[data-v-69e3e417]{color:#ffffffb3;font-weight:500;text-decoration:none}.nav-item[data-v-69e3e417]:hover{color:#fff}.nav-item.nuxt-link-exact-active[data-v-69e3e417]{color:#6fedd6}.register[data-v-69e3e417]{padding:6px 16px}.side[data-v-69e3e417],nav[data-v-69e3e417]{align-items:center;display:flex;gap:24px}.nav-logo[data-v-69e3e417]{margin-right:24px}@media (max-width:830px){.side a[data-v-69e3e417],nav a[data-v-69e3e417]:nth-child(n+2){display:none}.nav-header[data-v-69e3e417]{margin:0 22px}.logout[data-v-69e3e417]{display:none}} 41</style><link rel="stylesheet" href="/_nuxt/NavHeader.7f9e860a.css" type="text/x-inlined"> 42<style>.panel[data-v-48f6cf02]{position:relative;text-align:center;z-index:3}.panel .selected[data-v-48f6cf02]{margin-top:3px;scale:.85}.panel .selection-box[data-v-48f6cf02]{background-color:#fff;box-shadow:0 4px 37.2px #00000017;color:#000;right:4px;top:30px}.panel .selection-box .language[data-v-48f6cf02]:hover{background-color:#00000040}.panel .selection-box[data-v-48f6cf02]:before{background-color:#fff;content:"";height:10px;position:absolute;right:10px;transform:rotate(45deg) translateY(-5px);width:10px}.panel .lang-item[data-v-48f6cf02]:hover{background-color:#edf8ff}.entrance[data-v-48f6cf02]{text-align:center;z-index:3}.entrance .selected[data-v-48f6cf02]{position:absolute;right:-30px;scale:.85;top:-70px}.entrance .selection-box[data-v-48f6cf02]{background-color:#fff;color:#000;right:-26px;top:-40px}.entrance .selection-box .language[data-v-48f6cf02]:hover{background-color:#00000040}.entrance .selection-box[data-v-48f6cf02]:before{background-color:#fff;content:"";height:10px;position:absolute;right:10px;transform:rotate(45deg) translateY(-5px);width:10px}.entrance .lang-item[data-v-48f6cf02]:hover{background-color:#edf8ff}@media (prefers-color-scheme:dark){.entrance .selection-box[data-v-48f6cf02],.panel .selection-box[data-v-48f6cf02]{background:#535c6e;color:#fff}.entrance .selection-box[data-v-48f6cf02]:before,.panel .selection-box[data-v-48f6cf02]:before{background:#535c6e}.panel .lang-item[data-v-48f6cf02]:hover{color:#000}}@media screen and (max-width:767px){.entrance .selected[data-v-48f6cf02],.panel .selected[data-v-48f6cf02]{right:0}.entrance .selection-box[data-v-48f6cf02]:before,.panel .selection-box[data-v-48f6cf02]:before{display:none}}.item-lang-name[data-v-48f6cf02],.item-lang-name[data-v-48f6cf02]:active,.item-lang-name[data-v-48f6cf02]:hover,.item-lang-name[data-v-48f6cf02]:visited{text-decoration:none}.item-lang-name[data-v-48f6cf02]{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}.language-select[data-v-48f6cf02]{align-items:center;display:flex}.language-select .selection-box[data-v-48f6cf02]{right:0;top:60px}.lang-item[data-v-48f6cf02]{align-items:center;cursor:pointer;display:flex;gap:8px;padding:8px 16px;text-decoration:none}.lang-item[data-v-48f6cf02]:hover{background-color:#22395e}.lang-item[data-v-48f6cf02]:first-child{border-radius:6px 0 0}.lang-item[data-v-48f6cf02]:nth-child(2){border-radius:0 6px 0 0}.lang-item[data-v-48f6cf02]:nth-child(23){border-radius:0 0 0 6px}.lang-item[data-v-48f6cf02]:last-child{border-radius:0 0 6px}.item-flag img[data-v-48f6cf02]{display:block;width:30px}.selected[data-v-48f6cf02]{box-shadow:0 0 4px #000;cursor:pointer;height:22px;scale:.73;
42transition:box-shadow .2s;vertical-align:middle;width:30px}.selected[data-v-48f6cf02]:hover{box-shadow:0 0 4px 1px #6ac9ff}.selection-box[data-v-48f6cf02]{background-color:#111d35;border-radius:6px;color:#fff;display:grid;grid-template-columns:1fr 1fr;opacity:1;position:absolute;transition:all .2s;visibility:visible;z-index:100}.selection-box.lang-hidden[data-v-48f6cf02]{opacity:0;visibility:hidden}@media (max-width:740px){.language-select[data-v-48f6cf02]{margin-left:auto}.selection-box[data-v-48f6cf02]{box-shadow:0 6px 20px #000000b3;margin-left:0;padding:8px 0;right:0}}.flag[data-v-48f6cf02]{background:url(/_nuxt/flag_sprite_normal.75830cbf.png) no-repeat 0 0;height:20px;width:30px}.flag.ar[data-v-48f6cf02]{background-position:0 1px}.flag.bn[data-v-48f6cf02]{background-position:0 -20px}.flag.pt[data-v-48f6cf02]{background-position:0 -41px}.flag.de[data-v-48f6cf02]{background-position:0 -62px}.flag.en[data-v-48f6cf02]{background-position:0 -83px}.flag.es[data-v-48f6cf02]{background-position:0 -104px}.flag.fa[data-v-48f6cf02]{background-position:0 -125px}.flag.fil[data-v-48f6cf02]{background-position:0 -146px}.flag.fr[data-v-48f6cf02]{background-position:0 -167px}.flag.hi[data-v-48f6cf02]{background-position:0 -188px}.flag.id[data-v-48f6cf02]{background-position:0 -209px}.flag.it[data-v-48f6cf02]{background-position:0 -230px}.flag.ja[data-v-48f6cf02]{background-position:0 -251px}.flag.ko[data-v-48f6cf02]{background-position:0 -272px}.flag.nl[data-v-48f6cf02]{background-position:0 -293px}.flag.pl[data-v-48f6cf02]{background-position:0 -314px}.flag.ru[data-v-48f6cf02]{background-position:0 -356px}.flag.sv[data-v-48f6cf02]{background-position:0 -377px}.flag.th[data-v-48f6cf02]{background-position:0 -398px}.flag.tr[data-v-48f6cf02]{background-position:0 -419px}.flag.uk[data-v-48f6cf02]{background-position:0 -440px}.flag.ur[data-v-48f6cf02]{background-position:0 -461px}.flag.vi[data-v-48f6cf02]{background-position:0 -482px}.flag.zh[data-v-48f6cf02]{background-position:0 -503px}@media (min-resolution:192dpi){.flag[data-v-48f6cf02]{background:url(/_nuxt/flag_sprite_retina.3ebaa0c6.png) no-repeat 0 0;background-size:30px 525px}} 43</style><link rel="stylesheet" href="/_nuxt/LanguageSelect.44f8964c.css" type="text/x-inlined"> 44<style>.page-link[data-v-1e39db13]{align-items:center;display:flex;padding:6px 0}.page-link .bullet-col[data-v-1e39db13]{margin-right:8px}a[data-v-1e39db13]{color:#212121;text-decoration:none}.router-link-exact-active[data-v-1e39db13]{color:#0038ff;font-weight:700;text-decoration:none} 45</style><link rel="stylesheet" href="/_nuxt/DocPageLink.8ccbdbdc.css" type="text/x-inlined"> 46<style>.img[data-v-72a7208e]{max-width:100%}.inline-highlight[data-v-72a7208e]{background:#ccc;padding:0 4px} 47</style><link rel="stylesheet" href="/_nuxt/how-to-integrate-the-plugin.544a3f2b.css" type="text/x-inlined"> 48<style>.example-code .tabs-list{display:flex}.example-code .tabs-list .tab-title{background-color:#ffffff1a;cursor:pointer;font-size:14px;margin-right:-2px;padding:5px 10px;transition:border-width .2s linear}.example-code .tabs-list .tab-title.active{background-color:#282c34;border-bottom:1px solid hsla(0,0%,100%,.44);color:#fff;transition:background .2s linear}.example-code code,.example-code pre{margin:0;padding:0}.example-code .body{direction:ltr!important;font-size:14px;padding:15px}.hljs{background:#282c34;color:#abb2bf}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} 49</style><link rel="stylesheet" href="/_nuxt/SourceTabs.dfc5a7e9.css" type="text/x-inlined"> 50<style>.example-code .copy-code[data-v-f4723e5d]{align-items:center;background:#282c34;border:1px solid hsla(0,0%,100%,.2);border-radius:3px;color:#bbb;cursor:pointer;display:flex;font-size:12px;gap:4px;line-height:16px;padding:3px 8px;position:absolute;right:8px;top:8px;transition:color .2s,border-color .2s;z-index:1}.example-code .copy-code[data-v-f4723e5d]:hover{border-color:#ffffff80;color:#fff}.example-code .copy-code[data-v-f4723e5d] svg{fill:currentColor;height:14px;margin-bottom:0;width:14px}.example-code code[data-v-f4723e5d],.example-code pre[data-v-f4723e5d]{margin:0;padding:0;white-space:pre-wrap}.example-code .body[data-v-f4723e5d]{direction:ltr!important;font-size:14px;padding:15px 10px;position:relative}.hljs[data-v-f4723e5d]{background:#282c34;
50color:#abb2bf}.hljs-comment[data-v-f4723e5d],.hljs-quote[data-v-f4723e5d]{color:#5c6370;font-style:italic}.hljs-doctag[data-v-f4723e5d],.hljs-formula[data-v-f4723e5d],.hljs-keyword[data-v-f4723e5d]{color:#c678dd}.hljs-deletion[data-v-f4723e5d],.hljs-name[data-v-f4723e5d],.hljs-section[data-v-f4723e5d],.hljs-selector-tag[data-v-f4723e5d],.hljs-subst[data-v-f4723e5d]{color:#e06c75}.hljs-literal[data-v-f4723e5d]{color:#56b6c2}.hljs-addition[data-v-f4723e5d],.hljs-attribute[data-v-f4723e5d],.hljs-meta .hljs-string[data-v-f4723e5d],.hljs-regexp[data-v-f4723e5d],.hljs-string[data-v-f4723e5d]{color:#98c379}.hljs-attr[data-v-f4723e5d],.hljs-number[data-v-f4723e5d],.hljs-selector-attr[data-v-f4723e5d],.hljs-selector-class[data-v-f4723e5d],.hljs-selector-pseudo[data-v-f4723e5d],.hljs-template-variable[data-v-f4723e5d],.hljs-type[data-v-f4723e5d],.hljs-variable[data-v-f4723e5d]{color:#d19a66}.hljs-bullet[data-v-f4723e5d],.hljs-link[data-v-f4723e5d],.hljs-meta[data-v-f4723e5d],.hljs-selector-id[data-v-f4723e5d],.hljs-symbol[data-v-f4723e5d],.hljs-title[data-v-f4723e5d]{color:#61aeee}.hljs-built_in[data-v-f4723e5d],.hljs-class .hljs-title[data-v-f4723e5d],.hljs-title.class_[data-v-f4723e5d]{color:#e6c07b}.hljs-emphasis[data-v-f4723e5d]{font-style:italic}.hljs-strong[data-v-f4723e5d]{font-weight:700}.hljs-link[data-v-f4723e5d]{text-decoration:underline} 51</style><link rel="stylesheet" href="/_nuxt/SourceCode.e88cdd39.css" type="text/x-inlined"> 52<style>.nuxt-icon svg{height:1em;margin-bottom:.125em;vertical-align:middle;width:1em}.nuxt-icon.nuxt-icon--fill,.nuxt-icon.nuxt-icon--fill *{fill:currentColor!important}.nuxt-icon.nuxt-icon--stroke,.nuxt-icon.nuxt-icon--stroke *{stroke:currentColor!important} 53</style><link rel="stylesheet" href="/_nuxt/nuxt-icon.4544dae2.css" type="text/x-inlined"> 54<style>.example-code-with-titles[data-v-ed59ce05]{display:grid;grid-template-columns:1fr;margin-top:10px;overflow:hidden;position:relative}td>.example-code-with-titles[data-v-ed59ce05]{margin-top:8px}.example-code-with-titles>div[data-v-ed59ce05]{background:#282c34;border-radius:3px;overflow:auto}.source-tabs-static .source-tabs-title[data-v-ed59ce05]{font-size:18px;font-weight:600;margin:-50px 0 10px;position:absolute}.source-tabs-static .tabs-list[data-v-ed59ce05]{display:flex}.source-tabs-static .tabs-list.has-titles[data-v-ed59ce05]{margin-top:20px}.source-tabs-static .tabs-list .tab-title[data-v-ed59ce05]{background-color:#ffffff1a;color:#bbb;cursor:pointer;font-size:14px;margin-right:-2px;padding:5px 10px;transition:border-width .2s linear}.source-tabs-static .tabs-list .tab-title.active[data-v-ed59ce05]{background-color:#282c34;border-bottom:1px solid hsla(0,0%,100%,.44);color:#fff;transition:background .2s linear}.source-tabs-static>.body[data-v-ed59ce05]{padding:0} 55</style><link rel="stylesheet" href="/_nuxt/SourceTabsStatic.2a273ee6.css" type="text/x-inlined"> 56<link rel="modulepreload" as="script" crossorigin href="/_nuxt/entry.51d5b899.js"> 57<link rel="modulepreload" as="script" crossorigin href="/_nuxt/tutorials.615a864c.js"> 58<link rel="modulepreload" as="script" crossorigin href="/_nuxt/NavHeader.bb1dc977.js"> 59<link rel="modulepreload" as="script" crossorigin href="/_nuxt/nuxt-link.f985b5c2.js"> 60<link rel="modulepreload" as="script" crossorigin href="/_nuxt/LanguageSelect.8d12a376.js"> 61<link rel="modulepreload" as="script" crossorigin href="/_nuxt/vue-i18n.runtime.4dbdeff2.js"> 62<link rel="modulepreload" as="script" crossorigin href="/_nuxt/language.1198f6fa.js"> 63<link rel="modulepreload" as="script" crossorigin href="/_nuxt/composables.d3ffa1d3.js"> 64<link rel="modulepreload" as="script" crossorigin href="/_nuxt/forms.6fe0f7ba.js"> 65<link rel="modulepreload" as="script" crossorigin href="/_nuxt/customerapi.134c496e.js"> 66<link rel="modulepreload" as="script" crossorigin href="/_nuxt/_commonjsHelpers.de833af9.js"> 67<link rel="modulepreload" as="script" crossorigin href="/_nuxt/global.e6af96d0.js"> 68<link rel="modulepreload" as="script" crossorigin href="/_nuxt/menu.ab279987.js"> 69<link rel="modulepreload" as="script" crossorigin href="/_nuxt/vue.-sixQ7xP.5ec1e524.js"> 70<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DocPageLink.346ad0d3.js"> 71<link rel="modulepreload" as="script" crossorigin href="/_nuxt/how-to-integrate-the-plugin.85abdaee.js"> 72<link rel="modulepreload" as="script" crossorigin href="/_nuxt/SourceCode.37422075.js"> 73<link rel="modulepreload" as="script" crossorigin href="/_nuxt/nuxt-icon.vue.dd657284.js"> 74<link rel="modulepreload" as="script" crossorigin href="/_nuxt/xml.ecf82975.js"> 75<link rel="modulepreload" as="script" crossorigin href="/_nuxt/kotlin.396f27c2.js"> 76<link rel="modulepreload" as="script" crossorigin href="/_nuxt/SourceTabsStatic.fe85f73d.js"> 77<link rel="modulepreload" as="script" crossorigin href="/_nuxt/nuxt-icon.0bfab04e.js">
78<script type="module" src="/_nuxt/entry.51d5b899.js" crossorigin></script>
78</head> 79<body ><div id="__nuxt"><div class="tutorials"><div class="nav-header-wrap" data-v-69e3e417><div class="nav-header" data-v-69e3e417><nav data-v-69e3e417><a href="/" class="nav-logo" data-v-69e3e417><img src="/_nuxt/logo.108c78f7.svg" width="78" height="23" alt="logo" data-v-69e3e417></a> <a href="/" class="nav-item" data-v-69e3e417>Home</a> <a href="/apidoc" class="nav-item" data-v-69e3e417>Documentation</a> <a href="/tutorials" class="nuxt-link-exact-active selected-item nav-item" data-v-69e3e417>Tutorials</a></nav> <div class="side" data-v-69e3e417><div class="language-select" data-v-69e3e417 data-v-48f6cf02><div class="en selected flag" data-v-48f6cf02></div> <div class="lang-hidden selection-box" data-v-48f6cf02><!--[--><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag en" alt="English" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>English</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag sv" alt="Svenska" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Svenska</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag pt" alt="Brasileiro" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Brasileiro</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag fr" alt="Française" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Française</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag nl" alt="Nederlands" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Nederlands</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag es" alt="Español" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Español</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag de" alt="Deutsch" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Deutsch</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag it" alt="Italiano" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Italiano</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag pl" alt="Polski" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Polski</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag uk" alt="УкÑаÑнÑÑка" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>УкÑаÑнÑÑка</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag ru" alt="Ð ÑÑÑкий" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Ð ÑÑÑкий</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag tr" alt="Türkçe" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Türkçe</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag ar" alt="عربÙ" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>عربÙ</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag fa" alt="ÙØ§Ø±Ø³Û" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>ÙØ§Ø±Ø³Û</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag ur" alt="اردÙ" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>اردÙ</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag hi" alt="हिà¤à¤¦à¥" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>हिà¤à¤¦à¥</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag bn" alt="বাà¦à¦²à¦¾" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>বাà¦à¦²à¦¾</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag vi" alt="Tiếng Viá»t" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Tiếng Viá»t</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag th" alt="à¹à¸à¸¢" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>à¹à¸à¸¢</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag id" alt="Indonesia" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Indonesia</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag fil" alt="Tagalog" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>Tagalog</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag zh" alt="䏿" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>䏿</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag ko" alt="íêµì´" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>íêµì´</div></div><div class="lang-item" data-v-48f6cf02><div class="item-flag" data-v-48f6cf02><div class="flag ja" alt="æ¥æ¬èª" data-v-48f6cf02></div></div> <div class="item-lang-name" data-v-48f6cf02>æ¥æ¬èª</div></div><!--]--></div></div> <div class="mobilemenu" data-v-69e3e417 data-v-4f26d3f8><div class="mobmenu-wrap" data-v-4f26d3f8><a href="/" class="nav-item" data-v-4f26d3f8>Home</a> <a href="/apidoc" class="nav-item" data-v-4f26d3f8>Documentation</a> <a href="/tutorials" class="nav-item" data-v-4f26d3f8>Tutorials</a> <a href="/clients/entrance/login" class="nav-item" data-v-4f26d3f8>Sign In</a> <!----></div></div> <!----> <!----> <a href="/clients/entrance/login" class="nav-item" data-v-69e3e417>Sign In</a> <a href="/clients/entrance/register" class="btn btn-cta register" data-v-69e3e417>Register</a></div></div></div> <div class="docs-content"><div class="col-pages-list"><div class="pages-list"><div class="mobile-close"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHASURBVHgB7ZrBTcNAEEU/UADuAJdgd4DgxImUkBtXWoJCoASogFRAgAYCs2hHsRTF3rF3lh0xT/qXRPH4xeu1x2vAcRzHcRzH0eEMchrKHeWGckH5onyiDMVrrygflO9BNpQO+vSx1rD2Nu6TCi0OZTnhc03pfqR2kG6gwPpIQW3pMdmQHeU+dWOnSKed+D78y8/IKx1knzB+BE8gOMIS4ZTJIad0imyA55HsNDicNLSG99QwHuYN06NvNp1gR+ZKS2S3KHCF0JSuTpbRkK5WlskpXb0sk0PajCyzRNqcLDNHWvKbqmQZqbRpWUYibV6WySVtQpZZKm1KlpkrbVKWkUqry0raQ2eCfzWkJXdQx6R7GGGprCnpXLImpKWNwBaGped0PR2MSi9p8XoYk87Rz5qRztm8Vy+t8aSiWmnNxzLVSZd4BiWVVrsNbZG+1LJ0RyTSYamlgQJrlJFlUqX/bLk0EIb7FeUVy3mhXMdtTnGORHIul+aUZVKlN1AgnCfHhph2D9tP1G6hxCoW2GF//oRJo0TD3sVau0HeKbeCbfy+LiClpVxi/5LLA8q9ttTG2hex9mPB2o7jOI7jOM4oP09xm/w79JAHAAAAAElFTkSuQmCC" alt=""></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIH
79ImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials" class="" data-v-1e39db13>Tutorials list</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/how-to-submit-recaptcha-gresponse-with-textarea" class="" data-v-1e39db13>Bypassing reCaptcha V2 with NodeJS and Axios</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/submit-form-with-recaptcha-using-callback-function" class="" data-v-1e39db13>Submit form with reCaptcha v2 using the callback function.</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/recaptcha-with-anonymous-callback-function" class="" data-v-1e39db13>Submit a form with reCaptcha v2 with obfuscated code and an anonymous callback function.</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/how-to-use-chrome-breakpoints-for-finding-funcaptcha-and-geetest-api-parameters" class="" data-v-1e39db13>Learn how to use breakpoints in Chrome to find API parameters for FunCaptcha and GeeTest</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/how-to-bypass-image-captcha" class="" data-v-1e39db13>Learn how to submit a form with an image captcha using Python</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIH
79ImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/how-to-bypass-recaptcha-v3" class="" data-v-1e39db13>Bypass reCaptcha V3 with NodeJS and Puppeteer</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/how-to-bypass-cloudflare" class="" data-v-1e39db13>How to bypass Cloudflare</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a aria-current="page" href="/apidoc/articles/how-to-integrate-the-plugin" class="router-link-active router-link-exact-active" data-v-1e39db13>How to integrate our plugin in Puppeteer or Selenium</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/how-to-use-g-response" class="" data-v-1e39db13>How to use g-response to submit a form with reCaptcha</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/how-to-find-the-sitekey" class="" data-v-1e39db13>How to find the reCaptcha sitekey</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/how-to-install-squid" class="" data-v-1e39db13>How to install best proxy server SQUID</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIH
79ImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/how-to-bypass-any-captcha" class="" data-v-1e39db13>How to bypass any captcha with AntiGate tasks</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/tutorials/bypass_any_captcha_with_antigate_templates" class="" data-v-1e39db13>Bypass any captcha with AntiGate templates</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/new_recaptcha_hand_gesture_verification_challenge" class="" data-v-1e39db13>Anti-Captcha vs Google's reCAPTCHA Hand Gesture Verification</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/best-2captcha-alternative" class="" data-v-1e39db13>The Best 2Captcha Alternative: Why Choose Anti-Captcha</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/best-captcha-solving-service" class="" data-v-1e39db13>Anti-Captcha: The Best Captcha Solving Service</a></div> <div class="page-link" data-v-1e39db13><div class="bullet-col" data-v-1e39db13><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADQSURBVHgB7ZKxDcIwEEXPoaHMCIyQKmnDBmwADJAoG0QZgSQ9YZPQEVeMABtkAdt8AxXCtpzaT7J0p7v7PsufKBD4hbkaqqrKhRA1YyxBGiulRsRD27YX29zKVizLsobQAKEN0vV7k0+8y7KMpmm6ku/GRVEcIHImC1LKbd/3479aZJnbkwNcXJtqkWUoJ7dw4i0MZnITewvj0+7kQDtkiXBDDrTtTDWj3TjnD1hKuyY3tDTw8ol8hTXw6Zim6RNh/PXvjJfccI5d1w0UCHjxAor2QgYCBBdeAAAAAElFTkSuQmCC" width="11" height="11" alt="list icon" data-v-1e39db13></div> <a href="/apidoc/articles/recaptcha_qr_is_natively_supported" class="" data-v-1e39db13>Recaptcha QR code challenge is natively supported</a></div></div></div> <div class="col-page-content"><div class="page-content"><div class="mobile-apidoc-menu"><div class="col-icon"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD5SURBVHgB7dfBDYJAEIXhWStQK9AShD61A0tAbUA6EEuwArEC19nIgcAc9EIY+L/kxWTCZY
79LAPhEAAAAMKMa40ZSaOvpUaDbWbsFaVn8qzVJ8qzVZCOHRHi6MCw/if9lkpTl2h9YdjjIdtd7hdXtg3eGXTEfvn2otfJfpuHQHvLSaC3aas/iUHslSjGUBAMAIRfqwS/ThhD4s9GHXfu7DN/k+A5791YczzUkTHSYtWgp9GAAwfsEaNsfpIL5F/Q73hr2DR7PsVnPVPDVvhynSDlYPso6Wadl0tJxNH94Lfdgt+rC1cCXTMas+nL4w+Zz6cE4fBgAAGNIHHYdo2ZDeeWMAAAAASUVORK5CYII="></div> <div class="col-text">Menu</div></div> <!--[--><div data-v-72a7208e><h1 data-v-72a7208e>How to use the Anti-Captcha plugin in Puppeteer or Selenium</h1> <p data-v-72a7208e>Puppeteer and Selenium are two popular tools for browser automation, and our plugin integrates seamlessly into them. In this article, we'll show how to use it in Puppeteer and Selenium for NodeJS and Python programming languages respectively. If you have to choose one or the other, we strongly recommend NodeJS+Puppeteer for its native environment.</p> <p data-v-72a7208e>1. Install dependencies. For NodeJS, install the given npm packages below; for Python, install the packages and download "chromedriver" executable from <!--[--><a href="https://chromedriver.chromium.org/downloads" target="_blank" data-v-72a7208e>this</a><!--]--> page. The driver version should match the Chrome version installed on your system.</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 80 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 81</svg> 82</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-bash" data-v-f4723e5d><!--[-->npm install adm-zip puppeteer puppeteer-extra puppeteer-extra-plugin-stealth<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 83 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 84</svg> 85</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-bash" data-v-f4723e5d><!--[-->pip3 install selenium<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>2. Download the ZIP version of the plugin for Chrome and unzip it to your project folder. Actual versions are located <!--[--><a href="https://antcpt.com/eng/download/google-chrome-options.html" target="_blank" data-v-72a7208e>here</a><!--]-->. You can also do it programmatically:</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 86 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 87</svg> 88</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->//npm install adm-zip 89const https = require('https') 90const fs = require('fs'); 91const AdmZip = require("adm-zip"); 92 93const pluginURL = 'https://antcpt.com/anticaptcha-plugin.zip'; 94 95(async () => { 96 // download the plugin 97 await new Promise((resolve) => { 98 https.get(pluginURL, resp => resp.pipe(fs.createWriteStream('./plugin.zip').on('close', resolve))); 99 }) 100 // unzip it 101 const zip = new AdmZip("./plugin.zip"); 102 await zip.extractAllTo("./plugin/", true); 103})();<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 104 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 105</svg> 106</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[-->import urllib.request 107import zipfile 108 109url = 'https://antcpt.com/anticaptcha-plugin.zip' 110# download the plugin 111filehandle, _ = urllib.request.urlretrieve(url) 112# unzip it 113with zipfile.ZipFile(filehandle, "r") as f: 114 f.extractall("plugin")<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>3. Next, configure your API key in the <!--[--><span class="inline-highlight" data-v-72a7208e>
114./plugin/js/config_ac_api_key.js</span><!--]--> file. You can find your API key in the <!--[--><a href="/clients/settings/apisetup" class="" data-v-72a7208e>customer area</a><!--]-->. You'll need a positive balance to get it working.</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 115 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 116</svg> 117</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->const apiKey = 'API_KEY_32_BYTES'; 118if (fs.existsSync('./plugin/js/config_ac_api_key.js')) {
119 let confData = fs.readFileSync('./plugin/js/config_ac_api_key.js', 'utf8'); 120 confData = confData.replace(/antiCapthaPredefinedApiKey = ''/g, `antiCapthaPredefinedApiKey = '${apiKey}'`); 121 fs.writeFileSync('./plugin/js/config_ac_api_key.js', confData, 'utf8'); 122} else { 123 console.error('plugin configuration not found!') 124}<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 125 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 126</svg> 127</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[-->import os 128import zipfile 129from pathlib import Path 130 131# set API key in configuration file 132api_key = "API_KEY_32_BYTES" 133file = Path('./plugin/js/config_ac_api_key.js') 134file.write_text(file.read_text().replace("antiCapthaPredefinedApiKey = ''", "antiCapthaPredefinedApiKey = '{}'".format(api_key))) 135 136# zip plugin directory back to plugin.zip 137zip_file = zipfile.ZipFile('./plugin.zip', 'w', zipfile.ZIP_DEFLATED) 138for root, dirs, files in os.walk("./plugin"): 139 for file in files: 140 path = os.path.join(root, file) 141 zip_file.write(path, arcname=path.replace("./plugin/", "")) 142zip_file.close()<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>4. Initialize the browser with the plugin. For Puppeteer we recommend the 'puppeteer-extra-plugin-stealth' plugin for the 'puppeteer-extra' package, which hides all signs of the web-automated Chromium browser.</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 143 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 144</svg> 145</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->//npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth 146const puppeteer = require('puppeteer-extra'); 147const StealthPlugin = require('puppeteer-extra-plugin-stealth'); 148puppeteer.use(StealthPlugin()); 149 150(async () => { 151 const browser = await puppeteer.launch({ 152 headless: false, 153 ignoreDefaultArgs: [ 154 "--disable-extensions", 155 "--enable-automation" 156 ], 157 args: [ 158 '--disable-web-security', 159 '--disable-features=IsolateOrigins,site-per-process', 160 '--allow-running-insecure-content', 161 '--disable-blink-features=AutomationControlled', 162 '--no-sandbox', 163 '--mute-audio', 164 '--no-zygote', 165 '--no-xshm', 166 '--window-size=1920,1080', 167 '--no-first-run', 168 '--no-default-browser-check', 169 '--disable-dev-shm-usage', 170 '--disable-gpu', 171 '--enable-webgl', 172 '--ignore-certificate-errors', 173 '--lang=en-US,en;q=0.9', 174 '--password-store=basic', 175 '--disable-gpu-sandbox', 176 '--disable-software-rasterizer', 177 '--disable-background-timer-throttling', 178 '--disable-backgrounding-occluded-windows', 179 '--disable-renderer-backgrounding', 180 '--disable-infobars', 181 '--disable-breakpad', 182 '--disable-canvas-aa', 183 '--disable-2d-canvas-clip-aa', 184 '--disable-gl-drawing-for-tests', 185 '--enable-low-end-device-mode', 186 '--disable-extensions-except=./plugin', 187 '--load-extension=./plugin' 188 ] 189 }); 190 const page = await browser.newPage(); 191})();<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 192 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 193</svg> 194</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[-->from selenium import webdriver 195 196options = webdriver.ChromeOptions() 197options.add_extension('./plugin.zip') 198 199browser = webdriver.Chrome('./chromedriver', options=options)<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>5. Navigate to a target page and fill a form if required. The plugin will pick up the reCaptcha automatically and start solving it.</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 200 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 201</svg> 202</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->(async () => { 203 const url = 'https://anti-captcha.com/demo/?page=recaptcha_v2_textarea'; 204 const login = 'Test login'; 205 const password = 'Test password'; 206 207 try { 208 await page.goto(url, { 209 waitUntil: "networkidle0" 210 }); 211 } catch (e) { 212 console.error('err while loading the page: '+e); 213 } 214 // disable navigation timeout errors 215 await page.setDefaultNavigationTimeout(0); 216 217 await page.$eval('#login', (element, login) => { 218 element.value = login; 219 }, login); 220 await page.$eval('#password', (element, password) => { 221 element.value = password; 222 }, password); 223 224})();<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 225 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 226</svg> 227</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[-->browser.get('https://anti-captcha.com/demo/?page=recaptcha_v2_textarea') 228 229# filling form 230browser.find_element_by_css_selector('#login').send_keys('Test login') 231browser.find_element_by_css_selector('#password').send_keys('Test password')<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>6. Next is the slightly tricky part. <!--[--><a href="https://anti-captcha.com/demo/?page=recaptcha_v2_textarea" target="_blank" data-v-72a7208e>Some</a><!--]--> web forms require users to press a submit button after solving the reCaptcha, <!--[--><a href="https://anti-captcha.com/demo/?page=recaptcha_v2_callback" data-v-72a7208e>others</a>
231<!--]--> utilize callbacks and submit them automatically. In the first case, we want to press the submit button right after the reCaptcha is solved. To do this at the right time, simply wait for the selector <!--[--><span class="inline-highlight" data-v-72a7208e>.antigate_solver.solved</span><!--]--> to come up and then press the submit button. </p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 232 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 233</svg> 234</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->// wait for "solved" selector to come up 235await page.waitForSelector('.antigate_solver.solved'
235).catch(error => console.log('failed to wait for the selector')); 236console.log('recaptcha solved'); 237 238// press the submit button 239await Promise.all([ 240 page.click('#submitButton'), 241 page.waitForNavigation({ waitUntil: "networkidle0" }) 242]); 243console.log('task completed, form with reCaptcha bypassed ');<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 244 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 245</svg> 246</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[--># wait for "solved" selector to come up 247webdriver.support.wait.WebDriverWait(browser, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved')) 248# press the submit button 249browser.find_element_by_css_selector('#submitButton').click()<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>That's it; the form is filled, and the reCaptcha is solved and bypassed. Full code samples:</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="has-titles tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><h3 class="source-tabs-title" data-v-ed59ce05>How to integrate Anti-Captcha browser extension in Node.js</h3> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 250 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 251</svg> 252</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-javascript" data-v-f4723e5d><!--[-->// first run the following to install required npm packages: 253// 254// npm install adm-zip follow-redirects puppeteer puppeteer-extra puppeteer-extra-plugin-stealth 255// 256// 257const https = require('follow-redirects').https; 258const fs = require('fs'); 259const AdmZip = require("adm-zip"); 260 261const apiKey = 'YOUR_API_KEY_HERE!'; 262const pluginURL = 'https://antcpt.com/anticaptcha-plugin.zip'; 263const url = 'https://anti-captcha.com/demo/?page=recaptcha_v2_textarea'; 264const login = 'Test login'; 265const password = 'Test password'; 266let page = null; 267 268 269const puppeteer = require('puppeteer-extra'); 270const StealthPlugin = require('puppeteer-extra-plugin-stealth'); 271puppeteer.use(StealthPlugin()); 272 273(async () => { 274 // download the plugin 275 await new Promise((resolve) => { 276 https.get(pluginURL, resp => resp.pipe(fs.createWriteStream('./plugin.zip').on('close', resolve))); 277 }) 278 // unzip it 279 const zip = new AdmZip("./plugin.zip"); 280 await zip.extractAllTo("./plugin/", true); 281 282 // set API key in configuration file 283 await new Promise((resolve, reject) => { 284 if (fs.existsSync('
284./plugin/js/config_ac_api_key.js')) { 285 let confData = fs.readFileSync('./plugin/js/config_ac_api_key.js', 'utf8'); 286 confData = confData.replace(/antiCapthaPredefinedApiKey = ''/g, `antiCapthaPredefinedApiKey = '${apiKey}'`); 287 fs.writeFileSync('./plugin/js/config_ac_api_key.js', confData, 'utf8'); 288 resolve(); 289 } else { 290 console.error('plugin configuration not found!') 291 reject(); 292 } 293 }); 294 295 // set browser launch options 296 const options = { 297 headless: false, 298 ignoreDefaultArgs: [ 299 "--disable-extensions", 300 "--enable-automation" 301 ], 302 args: [ 303 '--disable-web-security', 304 '--disable-features=IsolateOrigins,site-per-process', 305 '--allow-running-insecure-content', 306 '--disable-blink-features=AutomationControlled', 307 '--no-sandbox', 308 '--mute-audio', 309 '--no-zygote', 310 '--no-xshm', 311 '--window-size=1920,1080', 312 '--no-first-run', 313 '--no-default-browser-check', 314 '--disable-dev-shm-usage', 315 '--disable-gpu', 316 '--enable-webgl', 317 '--ignore-certificate-errors', 318 '--lang=en-US,en;q=0.9', 319 '--password-store=basic', 320 '--disable-gpu-sandbox', 321 '--disable-software-rasterizer', 322 '--disable-background-timer-throttling', 323 '--disable-backgrounding-occluded-windows', 324 '--disable-renderer-backgrounding', 325 '--disable-infobars', 326 '--disable-breakpad', 327 '--disable-canvas-aa', 328 '--disable-2d-canvas-clip-aa', 329 '--disable-gl-drawing-for-tests', 330 '--enable-low-end-device-mode', 331 '--disable-extensions-except=./plugin', 332 '--load-extension=./plugin' 333 ] 334 } 335 336 try { 337 // launch browser with the plugin 338 const browser = await puppeteer.launch(); 339 page = await browser.newPage(); 340 } catch (e) { 341 console.log('could not launch browser: '+e.toString()) 342 return; 343 } 344 345 // navigate to the target page 346 try { 347 await page.goto(url, { 348 waitUntil: "networkidle0" 349 }); 350 } catch (e) { 351 console.error('err while loading the page: '+e); 352 } 353 354 // disable navigation timeout errors 355 await page.setDefaultNavigationTimeout(0); 356 357 // fill the form 358 await page.$eval('#login', (element, login) => { 359 element.value = login; 360 }, login); 361 await page.$eval('#password', (element, password) => { 362 element.value = password; 363 }, password); 364 365 // wait for "solved" selector to come up 366 await page.waitForSelector('.antigate_solver.solved'
366).catch(error => console.log('failed to wait for the selector')); 367 console.log('recaptcha solved'); 368 369 // press the submit button 370 await Promise.all([ 371 page.click('#submitButton'), 372 page.waitForNavigation({ waitUntil: "networkidle0" }) 373 ]); 374 console.log('recaptcha solved'); 375 376})();<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><h3 class="source-tabs-title" data-v-ed59ce05>How to integrate Anti-Captcha browser extension in Python</h3> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 377 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 378</svg> 379</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-python" data-v-f4723e5d><!--[-->import urllib.request 380import zipfile 381import os 382from pathlib import Path 383from selenium import webdriver 384 385# download the plugin 386url = 'https://antcpt.com/anticaptcha-plugin.zip' 387filehandle, _ = urllib.request.urlretrieve(url) 388# unzip it 389with zipfile.ZipFile(filehandle, "r") as f: 390 f.extractall("plugin") 391 392# set API key in configuration file 393api_key = "YOUR_API_KEY_HERE!" 394file = Path('./plugin/js/config_ac_api_key.js') 395file.write_text(file.read_text().replace("antiCapthaPredefinedApiKey = ''", "antiCapthaPredefinedApiKey = '{}'".format(api_key))) 396 397# zip plugin directory back to plugin.zip 398zip_file = zipfile.ZipFile('./plugin.zip', 'w', zipfile.ZIP_DEFLATED) 399for root, dirs, files in os.walk("./plugin"): 400 for file in files: 401 path = os.path.join(root, file) 402 zip_file.write(path, arcname=path.replace("./plugin/", "")) 403zip_file.close() 404 405# set browser launch options 406options = webdriver.ChromeOptions() 407options.add_extension('./plugin.zip') 408 409# set browser launch options 410browser = webdriver.Chrome('./chromedriver', options=options) 411 412# navigate to the target page 413browser.get('https://anti-captcha.com/demo/?page=recaptcha_v2_textarea') 414 415# fill the form 416browser.find_element_by_css_selector('#login').send_keys('Test login') 417browser.find_element_by_css_selector('#password').send_keys('Test password') 418 419# wait for "solved" selector to come up 420webdriver.support.wait.WebDriverWait(browser, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved')) 421 422# press the submit button 423browser.find_element_by_css_selector('#submitButton').click()<!--]--></code></pre></div></div></div><!--]--></div></div> <p data-v-72a7208e>Bonus: there's a trick to running the plugin in headless mode, as Chrome does not support browser automation with plugins. Use the utility called <!--[--><span class="inline-highlight" data-v-72a7208e>Xvfb</span><!--]-->, which provides a virtual desktop for your application.</p> <div class="example-code-with-titles source-tabs-static" data-v-72a7208e data-v-ed59ce05><div class="tabs-list" role="tablist" aria-label="Language" data-v-ed59ce05><!--[--><div class="active tab-title" data-v-ed59ce05>Node.js</div><div class="tab-title" data-v-ed59ce05>Python</div><!--]--></div> <div class="body" data-v-ed59ce05><!--[--><div role="tabpanel" aria-labelledby="tab-Node.js" style="" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 424 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 425</svg> 426</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-bash" data-v-f4723e5d><!--[--># install the package 427apt-get install -y xvfb 428 429# set display variable 430export DISPLAY=:0 431 432# start Xvfb daemon in the background (only once) 433/usr/bin/Xvfb :0 -screen 0 1024x768x24 & 434
435# wait a moment to let it come up (only once) 436sleep 5 437 438# add the prefix "xvfb-run" to "node" or "python" script 439xvfb-run node myscript.js<!--]--></code></pre></div></div></div><div role="tabpanel" aria-labelledby="tab-Python" style="display:none;" data-v-ed59ce05><!----> <div class="example-code" data-v-72a7208e data-v-f4723e5d><div class="body" data-v-f4723e5d><button type="button" class="copy-code" aria-label="Copy" data-v-f4723e5d><span class="nuxt-icon nuxt-icon--fill" data-v-f4723e5d><svg viewBox="0 0 24 24"> 440 <path d="M10 2C9.44772 2 9 2.44772 9 3V17C9 17.5523 9.44772 18 10 18H20C20.5523 18 21 17.5523 21 17V8H17C15.8954 8 15 7.10457 15 6V2H10ZM17 2V6H21V4.41421L18.5858 2H17ZM7 3C7 1.34315 8.34315 0 10 0H18.5858C19.1162 0 19.6249 0.210714 20 0.585786L22.4142 3C22.7893 3.37507 23 3.88378 23 4.41421V17C23 18.6569 21.6569 20 20 20H16.5V21C16.5 22.6569 15.1569 24 13.5 24H4C2.34315 24 1 22.6569 1 21V7.5C1 5.84315 2.34315 4.5 4 4.5H7V3ZM7 6.5H4C3.44772 6.5 3 6.94772 3 7.5V21C3 21.5523 3.44772 22 4 22H13.5C14.0523 22 14.5 21.5523 14.5 21V20H10C8.34315 20 7 18.6569 7 17V6.5Z"/> 441</svg> 442</span> <span data-v-f4723e5d>Copy</span></button> <pre data-v-f4723e5d><code class="language-bash" data-v-f4723e5d><!--[--># install the package 443apt-get install -y xvfb 444 445# set display variable 446export DISPLAY=:0 447 448# start Xvfb daemon in the background (only once) 449/usr/bin/Xvfb :0 -screen 0 1024x768x24 & 450 451# wait a moment to let it come up (only once) 452sleep 5 453 454# add the prefix "xvfb-run" to "node" or "python" script 455xvfb-run python myscript.py<!--]--></code></pre></div></div></div><!--]--></div></div></div><!--]--></div></div></div> <div class="apidoc-footer"></div></div></div>
455<script type="application/json" id="__NUXT_DATA__" data-ssr="true">[["Reactive",1],{"data":2,"state":3,"_errors":18,"serverRendered":10,"path":19,"prerenderedAt":20},{},{"$slang_id":4,"$slang_code":5,"$slang_name":6,"$slang_url":7,"$slang_direction":8,"$slang_is_detected":9,"$slang_select_open":9,"$sisMenuHidden":10,"$snavigationSection":11,"$sisClientsMobileMenuOpened":9,"$sisClientsMenuHiddenManually":9,"$sisPanelLoaded":9,"$sisPageLoaderActive":10,"$spageTitleGlobal":12,"$sisTransitionsEnabled":10,"$sisPaymentResultMessageShown":9,"$sisNuxtLoaded":9,"$sisMobDocMenuOpen":9,"$sauthCookieValue":12,"$sisRequestActive":9,"$sauthorizationCheckStatus":13,"$sisAuthorized":9,"$saccountLogin":12,"$sblockedForms":14,"$sentranceAction":12,"$serrorCode":12,"$stwoFAResult":15,"$stwoFAAttemptsLeft":12,"$stwoFAEmailSentTo":12,"$srecaptchaType":16,"$srecaptchaSitekey":12,"$srecaptchaLoginAction":12,"$sentranceUser":12,"$sentrancePassword":12,"$sentranceRegisterEmail":12,"$sentranceTwoFACode":12,"$sisStayLogged":9,"$sisRecoverByEmail":9,"$sentranceRecoveryEmail":12,"$sentranceRecoveryConfirmationCode":12,"$sentranceRecoveryNewPassword":12,"$sentranceRecoveryConfirmationWarning":12,"$spasswordStrengthScore":17,"$sroutePathBeforeAuth":12},2,"en","English","https://anti-captcha.com/images/flags/en.png","ltr",false,true,"default","","unchecked",[],"success","v2",0,{},"/apidoc/articles/how-to-integrate-the-plugin",1790753938862]</script>
vendor: 1 bytes, line 455
455
456<script>window.__NUXT__={};window.__NUXT__.config={public:{prefetchSections:"prefetch-sections.db6816f5.js",i18n:{experimental:{jsTsFormatResource:false},baseUrl:""}},app:{baseURL:"/",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
456</body> 457</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.