[{"data":1,"prerenderedAt":712},["ShallowReactive",2],{"doc-en-integrations\u002Fautomation-frameworks":3},{"id":4,"title":5,"body":6,"description":704,"extension":705,"faq":706,"meta":707,"navigation":71,"path":708,"seo":709,"stem":710,"__hash__":711},"docs\u002Fdocs\u002Fen\u002Fintegrations\u002Fautomation-frameworks.md","Automation Frameworks",{"type":7,"value":8,"toc":696},"minimark",[9,22,27,34,148,155,159,166,299,316,320,401,405,484,622,626,629,659,663,692],[10,11,12,13,17,18,21],"p",{},"Integration guides for Selenium, Puppeteer, Playwright, Scrapy, and other automation and scraping frameworks. Replace ",[14,15,16],"code",{},"USERNAME"," and ",[14,19,20],{},"PASSWORD"," with your credentials and every example runs as-is.",[23,24,26],"h2",{"id":25},"scrapy","Scrapy",[10,28,29,30,33],{},"Enable the proxy middleware in ",[14,31,32],{},"settings.py",", or set the proxy per request:",[35,36,41],"pre",{"className":37,"code":38,"language":39,"meta":40,"style":40},"language-python shiki shiki-themes github-light","# Option 1: global (settings.py)\nHTTPPROXY_ENABLED = True\n\n# Set the proxy for each request in your Spider\ndef start_requests(self):\n    proxy = \"http:\u002F\u002FUSERNAME-pool-flow-region-US:PASSWORD@proxy.eproxies.net:23333\"\n    for url in self.start_urls:\n        yield scrapy.Request(url, meta={\"proxy\": proxy})\n","python","",[14,42,43,52,66,73,79,93,106,124],{"__ignoreMap":40},[44,45,48],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"sAwPA","# Option 1: global (settings.py)\n",[44,53,55,59,63],{"class":46,"line":54},2,[44,56,58],{"class":57},"sYu0t","HTTPPROXY_ENABLED",[44,60,62],{"class":61},"sD7c4"," =",[44,64,65],{"class":57}," True\n",[44,67,69],{"class":46,"line":68},3,[44,70,72],{"emptyLinePlaceholder":71},true,"\n",[44,74,76],{"class":46,"line":75},4,[44,77,78],{"class":50},"# Set the proxy for each request in your Spider\n",[44,80,82,85,89],{"class":46,"line":81},5,[44,83,84],{"class":61},"def",[44,86,88],{"class":87},"s7eDp"," start_requests",[44,90,92],{"class":91},"sgsFI","(self):\n",[44,94,96,99,102],{"class":46,"line":95},6,[44,97,98],{"class":91},"    proxy ",[44,100,101],{"class":61},"=",[44,103,105],{"class":104},"sYBdl"," \"http:\u002F\u002FUSERNAME-pool-flow-region-US:PASSWORD@proxy.eproxies.net:23333\"\n",[44,107,109,112,115,118,121],{"class":46,"line":108},7,[44,110,111],{"class":61},"    for",[44,113,114],{"class":91}," url ",[44,116,117],{"class":61},"in",[44,119,120],{"class":57}," self",[44,122,123],{"class":91},".start_urls:\n",[44,125,127,130,133,137,139,142,145],{"class":46,"line":126},8,[44,128,129],{"class":61},"        yield",[44,131,132],{"class":91}," scrapy.Request(url, ",[44,134,136],{"class":135},"sqxcx","meta",[44,138,101],{"class":61},[44,140,141],{"class":91},"{",[44,143,144],{"class":104},"\"proxy\"",[44,146,147],{"class":91},": proxy})\n",[10,149,150,151,154],{},"Per-request rotation is the default behavior and fits Scrapy's concurrency model naturally; add a ",[14,152,153],{},"sid"," to the username when you need session-pinned IPs.",[23,156,158],{"id":157},"selenium-python","Selenium (Python)",[10,160,161,162,165],{},"Chrome's command-line flags do not support authenticated proxies, so use ",[14,163,164],{},"selenium-wire"," to handle the credentials:",[35,167,169],{"className":37,"code":168,"language":39,"meta":40,"style":40},"# pip install selenium-wire\nfrom seleniumwire import webdriver\n\noptions = {\n    \"proxy\": {\n        \"http\": \"http:\u002F\u002FUSERNAME-pool-flow-region-US:PASSWORD@proxy.eproxies.net:23333\",\n        \"https\": \"http:\u002F\u002FUSERNAME-pool-flow-region-US:PASSWORD@proxy.eproxies.net:23333\",\n    }\n}\n\ndriver = webdriver.Chrome(seleniumwire_options=options)\ndriver.get(\"https:\u002F\u002Fipinfo.io\")\nprint(driver.page_source)\ndriver.quit()\n",[14,170,171,176,190,194,204,212,226,237,242,248,253,272,284,293],{"__ignoreMap":40},[44,172,173],{"class":46,"line":47},[44,174,175],{"class":50},"# pip install selenium-wire\n",[44,177,178,181,184,187],{"class":46,"line":54},[44,179,180],{"class":61},"from",[44,182,183],{"class":91}," seleniumwire ",[44,185,186],{"class":61},"import",[44,188,189],{"class":91}," webdriver\n",[44,191,192],{"class":46,"line":68},[44,193,72],{"emptyLinePlaceholder":71},[44,195,196,199,201],{"class":46,"line":75},[44,197,198],{"class":91},"options ",[44,200,101],{"class":61},[44,202,203],{"class":91}," {\n",[44,205,206,209],{"class":46,"line":81},[44,207,208],{"class":104},"    \"proxy\"",[44,210,211],{"class":91},": {\n",[44,213,214,217,220,223],{"class":46,"line":95},[44,215,216],{"class":104},"        \"http\"",[44,218,219],{"class":91},": ",[44,221,222],{"class":104},"\"http:\u002F\u002FUSERNAME-pool-flow-region-US:PASSWORD@proxy.eproxies.net:23333\"",[44,224,225],{"class":91},",\n",[44,227,228,231,233,235],{"class":46,"line":108},[44,229,230],{"class":104},"        \"https\"",[44,232,219],{"class":91},[44,234,222],{"class":104},[44,236,225],{"class":91},[44,238,239],{"class":46,"line":126},[44,240,241],{"class":91},"    }\n",[44,243,245],{"class":46,"line":244},9,[44,246,247],{"class":91},"}\n",[44,249,251],{"class":46,"line":250},10,[44,252,72],{"emptyLinePlaceholder":71},[44,254,256,259,261,264,267,269],{"class":46,"line":255},11,[44,257,258],{"class":91},"driver ",[44,260,101],{"class":61},[44,262,263],{"class":91}," webdriver.Chrome(",[44,265,266],{"class":135},"seleniumwire_options",[44,268,101],{"class":61},[44,270,271],{"class":91},"options)\n",[44,273,275,278,281],{"class":46,"line":274},12,[44,276,277],{"class":91},"driver.get(",[44,279,280],{"class":104},"\"https:\u002F\u002Fipinfo.io\"",[44,282,283],{"class":91},")\n",[44,285,287,290],{"class":46,"line":286},13,[44,288,289],{"class":57},"print",[44,291,292],{"class":91},"(driver.page_source)\n",[44,294,296],{"class":46,"line":295},14,[44,297,298],{"class":91},"driver.quit()\n",[10,300,301,302,307,308,311,312,315],{},"Alternatively, switch to ",[303,304,306],"a",{"href":305},"\u002Fdocs\u002Fusage\u002Fapi-extraction","whitelist mode",": extract auth-free ",[14,309,310],{},"IP:port"," proxies and use the native ",[14,313,314],{},"--proxy-server"," flag directly.",[23,317,319],{"id":318},"puppeteer-nodejs","Puppeteer (Node.js)",[35,321,325],{"className":322,"code":323,"language":324,"meta":40,"style":40},"language-javascript shiki shiki-themes github-light","const puppeteer = require(\"puppeteer\");\n\n(async () => {\n  const browser = await puppeteer.launch({\n    args: [\"--proxy-server=http:\u002F\u002Fproxy.eproxies.net:23333\"],\n  });\n  const page = await browser.newPage();\n  await page.authenticate({\n    username: \"USERNAME-pool-flow-region-US\",\n    password: \"PASSWORD\",\n  });\n  await page.goto(\"https:\u002F\u002Fipinfo.io\u002Fjson\");\n  console.log(await page.evaluate(() => document.body.innerText));\n  await browser.close();\n})();\n","javascript",[14,326,327,332,336,341,346,351,356,361,366,371,376,380,385,390,395],{"__ignoreMap":40},[44,328,329],{"class":46,"line":47},[44,330,331],{},"const puppeteer = require(\"puppeteer\");\n",[44,333,334],{"class":46,"line":54},[44,335,72],{"emptyLinePlaceholder":71},[44,337,338],{"class":46,"line":68},[44,339,340],{},"(async () => {\n",[44,342,343],{"class":46,"line":75},[44,344,345],{},"  const browser = await puppeteer.launch({\n",[44,347,348],{"class":46,"line":81},[44,349,350],{},"    args: [\"--proxy-server=http:\u002F\u002Fproxy.eproxies.net:23333\"],\n",[44,352,353],{"class":46,"line":95},[44,354,355],{},"  });\n",[44,357,358],{"class":46,"line":108},[44,359,360],{},"  const page = await browser.newPage();\n",[44,362,363],{"class":46,"line":126},[44,364,365],{},"  await page.authenticate({\n",[44,367,368],{"class":46,"line":244},[44,369,370],{},"    username: \"USERNAME-pool-flow-region-US\",\n",[44,372,373],{"class":46,"line":250},[44,374,375],{},"    password: \"PASSWORD\",\n",[44,377,378],{"class":46,"line":255},[44,379,355],{},[44,381,382],{"class":46,"line":274},[44,383,384],{},"  await page.goto(\"https:\u002F\u002Fipinfo.io\u002Fjson\");\n",[44,386,387],{"class":46,"line":286},[44,388,389],{},"  console.log(await page.evaluate(() => document.body.innerText));\n",[44,391,392],{"class":46,"line":295},[44,393,394],{},"  await browser.close();\n",[44,396,398],{"class":46,"line":397},15,[44,399,400],{},"})();\n",[23,402,404],{"id":403},"playwright-nodejs-python","Playwright (Node.js \u002F Python)",[35,406,408],{"className":322,"code":407,"language":324,"meta":40,"style":40},"\u002F\u002F Node.js\nconst { chromium } = require(\"playwright\");\n\n(async () => {\n  const browser = await chromium.launch({\n    proxy: {\n      server: \"http:\u002F\u002Fproxy.eproxies.net:23333\",\n      username: \"USERNAME-pool-flow-region-US\",\n      password: \"PASSWORD\",\n    },\n  });\n  const page = await browser.newPage();\n  await page.goto(\"https:\u002F\u002Fipinfo.io\u002Fjson\");\n  console.log(await page.textContent(\"body\"));\n  await browser.close();\n})();\n",[14,409,410,415,420,424,428,433,438,443,448,453,458,462,466,470,475,479],{"__ignoreMap":40},[44,411,412],{"class":46,"line":47},[44,413,414],{},"\u002F\u002F Node.js\n",[44,416,417],{"class":46,"line":54},[44,418,419],{},"const { chromium } = require(\"playwright\");\n",[44,421,422],{"class":46,"line":68},[44,423,72],{"emptyLinePlaceholder":71},[44,425,426],{"class":46,"line":75},[44,427,340],{},[44,429,430],{"class":46,"line":81},[44,431,432],{},"  const browser = await chromium.launch({\n",[44,434,435],{"class":46,"line":95},[44,436,437],{},"    proxy: {\n",[44,439,440],{"class":46,"line":108},[44,441,442],{},"      server: \"http:\u002F\u002Fproxy.eproxies.net:23333\",\n",[44,444,445],{"class":46,"line":126},[44,446,447],{},"      username: \"USERNAME-pool-flow-region-US\",\n",[44,449,450],{"class":46,"line":244},[44,451,452],{},"      password: \"PASSWORD\",\n",[44,454,455],{"class":46,"line":250},[44,456,457],{},"    },\n",[44,459,460],{"class":46,"line":255},[44,461,355],{},[44,463,464],{"class":46,"line":274},[44,465,360],{},[44,467,468],{"class":46,"line":286},[44,469,384],{},[44,471,472],{"class":46,"line":295},[44,473,474],{},"  console.log(await page.textContent(\"body\"));\n",[44,476,477],{"class":46,"line":397},[44,478,394],{},[44,480,482],{"class":46,"line":481},16,[44,483,400],{},[35,485,487],{"className":37,"code":486,"language":39,"meta":40,"style":40},"# Python\nfrom playwright.sync_api import sync_playwright\n\nwith sync_playwright() as p:\n    browser = p.chromium.launch(proxy={\n        \"server\": \"http:\u002F\u002Fproxy.eproxies.net:23333\",\n        \"username\": \"USERNAME-pool-flow-region-US\",\n        \"password\": \"PASSWORD\",\n    })\n    page = browser.new_page()\n    page.goto(\"https:\u002F\u002Fipinfo.io\u002Fjson\")\n    print(page.text_content(\"body\"))\n    browser.close()\n",[14,488,489,494,506,510,524,542,554,566,578,583,593,603,617],{"__ignoreMap":40},[44,490,491],{"class":46,"line":47},[44,492,493],{"class":50},"# Python\n",[44,495,496,498,501,503],{"class":46,"line":54},[44,497,180],{"class":61},[44,499,500],{"class":91}," playwright.sync_api ",[44,502,186],{"class":61},[44,504,505],{"class":91}," sync_playwright\n",[44,507,508],{"class":46,"line":68},[44,509,72],{"emptyLinePlaceholder":71},[44,511,512,515,518,521],{"class":46,"line":75},[44,513,514],{"class":61},"with",[44,516,517],{"class":91}," sync_playwright() ",[44,519,520],{"class":61},"as",[44,522,523],{"class":91}," p:\n",[44,525,526,529,531,534,537,539],{"class":46,"line":81},[44,527,528],{"class":91},"    browser ",[44,530,101],{"class":61},[44,532,533],{"class":91}," p.chromium.launch(",[44,535,536],{"class":135},"proxy",[44,538,101],{"class":61},[44,540,541],{"class":91},"{\n",[44,543,544,547,549,552],{"class":46,"line":95},[44,545,546],{"class":104},"        \"server\"",[44,548,219],{"class":91},[44,550,551],{"class":104},"\"http:\u002F\u002Fproxy.eproxies.net:23333\"",[44,553,225],{"class":91},[44,555,556,559,561,564],{"class":46,"line":108},[44,557,558],{"class":104},"        \"username\"",[44,560,219],{"class":91},[44,562,563],{"class":104},"\"USERNAME-pool-flow-region-US\"",[44,565,225],{"class":91},[44,567,568,571,573,576],{"class":46,"line":126},[44,569,570],{"class":104},"        \"password\"",[44,572,219],{"class":91},[44,574,575],{"class":104},"\"PASSWORD\"",[44,577,225],{"class":91},[44,579,580],{"class":46,"line":244},[44,581,582],{"class":91},"    })\n",[44,584,585,588,590],{"class":46,"line":250},[44,586,587],{"class":91},"    page ",[44,589,101],{"class":61},[44,591,592],{"class":91}," browser.new_page()\n",[44,594,595,598,601],{"class":46,"line":255},[44,596,597],{"class":91},"    page.goto(",[44,599,600],{"class":104},"\"https:\u002F\u002Fipinfo.io\u002Fjson\"",[44,602,283],{"class":91},[44,604,605,608,611,614],{"class":46,"line":274},[44,606,607],{"class":57},"    print",[44,609,610],{"class":91},"(page.text_content(",[44,612,613],{"class":104},"\"body\"",[44,615,616],{"class":91},"))\n",[44,618,619],{"class":46,"line":286},[44,620,621],{"class":91},"    browser.close()\n",[23,623,625],{"id":624},"ai-agents-llm-data-pipelines","AI agents \u002F LLM data pipelines",[10,627,628],{},"When driving browsers or collecting data with LLMs (LangChain tools, Browser Use, custom agents, etc.), pass the proxy configuration from any of the frameworks above. Key points:",[630,631,632,644,651],"ul",{},[633,634,635,636,638,639,643],"li",{},"Give each parallel agent its own ",[14,637,153],{}," so sessions never interfere (",[303,640,642],{"href":641},"\u002Fdocs\u002Fusage\u002Fsession-control","multi-session example",").",[633,645,646,647,650],{},"Have agents request ",[14,648,649],{},"https:\u002F\u002Fipinfo.io"," at the start of a task to verify the exit IP before doing real work.",[633,652,653,654,658],{},"Full parameter syntax on one page: ",[303,655,657],{"href":656},"\u002Fdocs\u002Fagent-reference","Agent Cheat Sheet",".",[23,660,662],{"id":661},"scraping-tools","Scraping tools",[10,664,665,666,672,673,672,677,672,682,672,687],{},"Official setup tutorials for GUI scraping tools: ",[303,667,671],{"href":668,"rel":669},"https:\u002F\u002Fwww.eproxies.io\u002Fintegrations\u002Foctoparse",[670],"nofollow","Octoparse"," · ",[303,674,26],{"href":675,"rel":676},"https:\u002F\u002Fwww.eproxies.io\u002Fintegrations\u002Fscrapy",[670],[303,678,681],{"href":679,"rel":680},"https:\u002F\u002Fwww.eproxies.io\u002Fintegrations\u002Fscrapestorm",[670],"ScrapeStorm",[303,683,686],{"href":684,"rel":685},"https:\u002F\u002Fwww.eproxies.io\u002Fintegrations\u002Fsellersprite",[670],"SellerSprite",[303,688,691],{"href":689,"rel":690},"https:\u002F\u002Fwww.eproxies.io\u002Fintegrations\u002Fhelium10",[670],"Helium 10",[693,694,695],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":40,"searchDepth":54,"depth":54,"links":697},[698,699,700,701,702,703],{"id":25,"depth":54,"text":26},{"id":157,"depth":54,"text":158},{"id":318,"depth":54,"text":319},{"id":403,"depth":54,"text":404},{"id":624,"depth":54,"text":625},{"id":661,"depth":54,"text":662},"Integration guides for Selenium, Puppeteer, Playwright, Scrapy, and other automation and scraping frameworks. Replace USERNAME and PASSWORD with your cr…","md",null,{},"\u002Fdocs\u002Fen\u002Fintegrations\u002Fautomation-frameworks",{"title":5,"description":704},"docs\u002Fen\u002Fintegrations\u002Fautomation-frameworks","duZX7LKdjSdrbDLY_IArYl1J86qMQ--bgztElpgkRDU",1785671055506]