如何在Selenium中为每个URL随机发送代理而不反复打开Chrome窗口

0 投票
1 回答
32 浏览
提问于 2025-04-13 17:44

这段代码在每次处理网址时都会打开一个新的Chrome窗口。如果我在循环外使用WebDriver实例,那么就不能为每个网址发送随机代理。

  1. 我想在这些代码行中为每个网址发送一个随机代理。
chrome_options.add_argument(f"--proxy-server={proxy}")
print(f"Using proxy: {proxy} for URL: {url}")
  1. 我不想一次又一次地打开webdriver.Chrome窗口。

proxyscrape_premium_http_proxies.txt

38.162.7.130:3128
38.162.15.189:3128
38.162.5.127:3128
38.162.18.151:3128

urls.txt

https://myexternalip.com/raw
https://2ip.io
http://httpbin.org/ip
https://ipv4.webshare.io

app.py

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

def rand_proxy():
    with open('proxyscrape_premium_http_proxies.txt', 'r') as file:
        product_names = file.read().splitlines()
        return random.choice(product_names)


with open('urls.txt', 'r') as file:
    urls = file.readlines()

for url in urls:
    proxy = rand_proxy()
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument(f"--proxy-server={proxy}")
    driver = webdriver.Chrome(options=chrome_options)

    url = url.strip()
    driver.get(url)

    print(f"Using proxy: {proxy} for URL: {url}")
time.sleep(10)

1 个回答

0

如果你想在浏览器会话中间更改代理设置,可以使用 SeleniumBase,并开启“Wire Mode”(也就是设置 wire=True)。

需要注意的是,SeleniumBase 的 driver 不仅包含了标准的 driver 方法,还有一些新的方法。

from seleniumbase import Driver

driver = Driver(wire=True)
try:
    driver.get("https://ipinfo.io/")
    driver.sleep(6)
    driver.set_wire_proxy("35.185.196.38:3128")
    driver.get("https://ipinfo.io/")
    driver.sleep(6)
finally:
    driver.quit()

如果你想从一个列表中随机选择一个项目,可以使用 random.choice(LIST)

import random

my_list = ["123", "456", "789"]
print(random.choice(my_list))

撰写回答