Socks5Proxy

Selenium proxy setup, pag-connect ng SOCKS5 at HTTP proxy sa Chrome at Firefox

Ang gabay na ito ay nagpapaliwanag kung paano ikonekta ang HTTP proxy at SOCKS5 proxy ng Socks5Proxy kapag nagpapatakbo ng Chrome at Firefox gamit ang Selenium 4, at setup para gumamit ng IP authorization dahil hindi tinatanggap ng Chrome launch argument ang proxy password.

Bakit mahirap ang proxy authentication sa Selenium?

Tinatanggap ng Chrome ang proxy address sa pamamagitan ng --proxy-server argument, ngunit hindi nito tinatanggap ang username at password sa loob ng address. Kung ikinonekta mo ang isang proxy na nangangailangan ng username at password, magpapakita ang browser ng authentication window, na mahirap punan ng mga halaga gamit ang Selenium.

Ang pinakamalinis na solusyon ay IP authorization. Kapag nirehistro ang IPv4 ng server o PC na nagpapatakbo ng Selenium sa dashboard, tatanggapin ng proxy ang koneksyon mula sa IP na iyon nang walang username at password. Sa Chrome, ilagay lang ang ip:port. Pwede hanggang 10 IP ang i-register para magamit sa maraming server.

Ginagamit ang IP 198.51.100.23, HTTP port 8000, SOCKS5 port 1080.

pip install selenium

Paano ikonekta ang HTTP proxy sa Chrome?

Pagkatapos mag-register ng IP authorization, ilagay ang address sa --proxy-server argument ng ChromeOptions. Sa Selenium 4.6 pataas, awtomatikong ida-download ng Selenium Manager ang tamang chromedriver kaya hindi na kailangang i-install separately.

Kahit sa headless mode, ang parehong argument ay naaapply. Para sa pagpapatunay ng koneksyon, buksan ang IP check address at tingnan kung ang IP ay proxy IP.

from selenium import webdriver
from selenium.webdriver.common.by import By

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://198.51.100.23:8000")  # this machine's IP is authorized in the dashboard
opts.add_argument("--headless=new")

driver = webdriver.Chrome(options=opts)
try:
    driver.get("https://api.ipify.org")
    print(driver.find_element(By.TAG_NAME, "body").text)  # should print the proxy IP
finally:
    driver.quit()

Paano gamitin ang SOCKS5 proxy sa Chrome?

Ilagay ang socks5:// address sa --proxy-server. Gumagamit ang Chrome ng SOCKS5 para sa domain name resolution sa proxy side, pero sa ilang environment, maaaring manatili ang internal DNS resolution, kaya karaniwang ginagamit ang --host-resolver-rules argument para pigilan ang local name resolution.

Ang SOCKS5 ay gumagamit rin ng IP authorization para sa koneksyon. Dahil hindi sinusuportahan ng Chrome ang username at password authentication para sa SOCKS proxy.

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=socks5://198.51.100.23:1080")
# make sure host names are resolved through the proxy
opts.add_argument('--host-resolver-rules=MAP * ~NOTFOUND , EXCLUDE 198.51.100.23')

driver = webdriver.Chrome(options=opts)
driver.get("https://api.ipify.org")
print(driver.page_source)
driver.quit()

Paano ikonekta sa Firefox?

Ang Firefox ay nagtatakda ng proxy sa pamamagitan ng mga preference value. Itakda ang network.proxy.type sa 1 (manual) at ilagay ang HTTP o SOCKS address at port. Para sa SOCKS5, itakda ang network.proxy.socks_version sa 5 at network.proxy.socks_remote_dns sa True para suriin ng proxy ang pangalan.

Ang Firefox ay walang paraan para maglagay ng proxy password sa execution settings, kaya ang pinakasimpleng paraan ay ang paggamit ng IP authorization.

from selenium import webdriver

opts = webdriver.FirefoxOptions()
opts.set_preference("network.proxy.type", 1)
opts.set_preference("network.proxy.socks", "198.51.100.23")
opts.set_preference("network.proxy.socks_port", 1080)
opts.set_preference("network.proxy.socks_version", 5)
opts.set_preference("network.proxy.socks_remote_dns", True)

driver = webdriver.Firefox(options=opts)
driver.get("https://api.ipify.org")
print(driver.page_source)
driver.quit()

Paano sabay-sabay na buksan ang maraming browser sa iba't ibang IP?

Pwede mong ilagay ang iba't ibang proxy address bawat browser at patakbuhin sila nang hiwalay. Ang sample code sa ibaba ay kumukuha ng ip:port list mula sa API at nagbubukas ng 3 browser instances na may kanya-kanyang IP. Dahil malakas kumain ng memory ang bawat browser, itakda ang bilang ng sabay-sabay na instances base sa server capacity.

Para sa mga matagalang gawain sa browser tulad ng pag-log in, mas mainam na gumamit ng isang IP address bawat browser at huwag itong palitan hanggang matapos ang gawain.

import requests
from selenium import webdriver

KEY = "YOUR_API_KEY"
lines = requests.get(
    "https://socks5proxy.io/api/v1/proxies/download",
    params={"format": "ip:port", "protocol": "http"},
    headers={"Authorization": "Bearer " + KEY},
    timeout=30,
).text.split()

drivers = []
for line in lines[:3]:
    opts = webdriver.ChromeOptions()
    opts.add_argument("--headless=new")
    opts.add_argument("--proxy-server=http://" + line)
    drivers.append(webdriver.Chrome(options=opts))

for d in drivers:
    d.get("https://api.ipify.org")
    print(d.page_source)
    d.quit()

Paano kung kailangang gamitin ang username at password authentication?

Kung hindi pwede ang IP authorization, halimbawa sa environment na palaging nagbabago ang outgoing IP, may dalawang paraan. Una, gumamit ng intermediate proxy library tulad ng selenium-wire para ipasok ang auth info. Pangalawa, mag-run ng local relay proxy na walang auth sa parehong server, at hayaan ang Chrome na kumonekta sa local address habang ang local relay ay kumokonekta sa Socks5Proxy gamit ang username·password.

Dagdag component pareho ang dalawang method kaya mas maraming ima-manage. Kung possible, ang IP authorization sa fixed IP server ang pinakasimple at pinakamabilis.

Ano ang mga dapat i-configure para mag-match ang browser environment sa target country?

Baguhin ang --lang argument at Accept-Language setting ng Chrome ayon sa IP country para magbukas ang page sa wikang iyon. Para sa site na mahalaga ang timezone, gamitin ang CDP command na Emulation.setTimezoneOverride para itugma din ang timezone.

Itakda ang laki ng window gamit ang --window-size argument, at kung kailangan mo ng mobile screen, gamitin ang mobile device emulation setting. Ang mga value na ito ay maaaring gawing bansa-specific na setting bundle para ma-run ang parehong test sa iba't ibang bansa nang pare-pareho.

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://198.51.100.23:8000")
opts.add_argument("--lang=de-DE")
opts.add_argument("--window-size=1366,900")

driver = webdriver.Chrome(options=opts)
driver.execute_cdp_cmd("Emulation.setTimezoneOverride", {"timezoneId": "Europe/Berlin"})
driver.get("https://example.com/")
driver.quit()

Ginagamit ba rin ang parehong setup sa Selenium Grid o remote browser?

Oo. Ang ChromeOptions at FirefoxOptions ay gumagana rin sa remote execution. Kapag ipinasok mo ang parehong opsyon sa webdriver.Remote, ang browser sa Grid node ay magkonekta gamit ang proxy na iyon. Ang IP na irehistro para sa IP authorization ay ang exit IP ng Grid node kung saan aktwal na tumatakbo ang browser, hindi ng PC na nag-e-execute ng code.

Kung maraming node, irehistro ang lahat ng IP ng bawat node. Maaari kang magrehistro ng hanggang 10. Kung madalas magbago ang cloud node, mas madaling pamahalaan kung maglagay ng fixed IP sa node.

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--proxy-server=http://198.51.100.23:8000")  # authorize the Grid node IP, not this machine
driver = webdriver.Remote(command_executor="http://grid.example.internal:4444", options=opts)
driver.get("https://api.ipify.org")
print(driver.page_source)
driver.quit()

Ano ang dapat i-check kapag hindi makakonekta?

Ang ERR_PROXY_CONNECTION_FAILED ay kadalasang sanhi ng maling address o port. Siguraduhing hindi mo nailagay ang SOCKS5 port sa HTTP address. Kung lumabas ang ERR_TUNNEL_CONNECTION_FAILED o authentication window, maaaring iba ang IP na nakarehistro sa IP authorization kaysa sa aktwal na IP na lumalabas. Gamitin ang cURL sa server para buksan ang api.ipify.org nang walang proxy at i-verify ang IP na lumalabas, pagkatapos ay i-register ang halagang iyon.

Ang outgoing IP ng cloud server ay maaaring magbago kapag nirestart. Gamitin ang fixed IP o i-update ang registration list sa dashboard kapag nagbago ang IP.

Selenium proxy setup, paraan ng pag-connect sa Chrome at Firefox | Socks5Proxy