如何在Selenium中为每个URL随机发送代理而不反复打开Chrome窗口
这段代码在每次处理网址时都会打开一个新的Chrome窗口。如果我在循环外使用WebDriver实例,那么就不能为每个网址发送随机代理。
- 我想在这些代码行中为每个网址发送一个随机代理。
chrome_options.add_argument(f"--proxy-server={proxy}")
print(f"Using proxy: {proxy} for URL: {url}")
- 我不想一次又一次地打开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))