Сначала позвольте мне сказать, что использование бесплатных IP-адресов прокси-сервера может быть очень проблематичным.
Этот тип прокси печально известен своими проблемами с подключением, такими как тайм-ауты, связанные с задержкой. Кроме того, эти сайты также могут быть прерывистыми, что означает, что они могут отключиться в любое время. И иногда этими сайтами злоупотребляют, поэтому они могут быть заблокированы.
Я раньше не использовал пакет Python http_request_randomizer
и заметил, что документация очень скудная. Я просмотрел исходный код пакета, чтобы понять его структуру.
Вот код, который использует http_request_randomizer
для получения случайного прокси-сервера HTTPS, который передается geckodriver
для использования.
import random
import logging
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.firefox.options import FirefoxProfile
from selenium.webdriver.firefox.options import DesiredCapabilities
from http_request_randomizer.requests.proxy.ProxyObject import Protocol
from http_request_randomizer.requests.proxy.requestProxy import RequestProxy
# Obtain a list of HTTPS proxies
# Suppress the console debugging output by setting the log level
req_proxy = RequestProxy(log_level=logging.ERROR, protocol=Protocol.HTTPS)
# Obtain a random single proxy from the list of proxy addresses
random_proxy = random.sample(req_proxy.get_proxy_list(), 1)
firefox_options = Options()
firefox_options.add_argument("--disable-infobars")
firefox_options.add_argument("--disable-extensions")
firefox_options.add_argument("--disable-popup-blocking")
profile_options = FirefoxProfile()
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:90.0) Gecko/20100101 Firefox/90.0'
firefox_options.set_preference('profile_options = FirefoxProfile()', user_agent)
firefox_capabilities = DesiredCapabilities().FIREFOX
# add the random proxy to firefox_capabilities
firefox_proxies = Proxy()
firefox_proxies.ssl_proxy = random_proxy[0].get_address()
firefox_proxies.add_to_capabilities(firefox_capabilities)
driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver', options=firefox_options,
desired_capabilities=firefox_capabilities)
# you can either do this
try:
# print proxy IP for testing
print(random_proxy[0].get_address())
# output
46.151.145.4:53281
URL = 'http://www.expressvpn.com/what-is-my-ip'
driver.get(URL)
# Some of the proxies pulled from http_request_randomizer will timeout
# for various reasons, so this exception is used to catch these timeouts
except TimeoutException as e:
print("A Page load Timeout Occurred.")
driver.quit()
# or this. You can also put this in a try/except block and
# increase the timeout as needed.
#
# driver.set_page_load_timeout(120)
# URL = 'http://www.expressvpn.com/what-is-my-ip'
# driver.get(URL)
Вот скриншот, показывающий, что IP-адрес был правильно использован Firefox для этого сеанса.

Как указывалось ранее, бесплатный прокси может иметь несколько проблем. В приведенном ниже коде показано, как использовать прокси-судью для проверки состояния отдельного прокси-сервера.
import random
import logging
from time import sleep
from random import randint
from proxy_checking import ProxyChecker
from http_request_randomizer.requests.proxy.ProxyObject import Protocol
from http_request_randomizer.requests.proxy.requestProxy import RequestProxy
def random_ssl_proxy_address():
# Obtain a list of HTTPS proxies
# Suppress the console debugging output by setting the log level
req_proxy = RequestProxy(log_level=logging.ERROR, protocol=Protocol.HTTPS)
# Obtain a random single proxy from the list of proxy addresses
random_proxy = random.sample(req_proxy.get_proxy_list(), 1)
return random_proxy[0].get_address()
def get_proxy_address():
proxy_address = random_ssl_proxy_address()
checker = ProxyChecker()
proxy_judge = checker.check_proxy(proxy_address)
proxy_status = [value for key, value in proxy_judge.items() if key == 'status']
if proxy_status[0]:
return proxy_address
else:
print('Looking for a valid proxy address.')
# this sleep timer is helping with some timeout issues
# that were happening when querying
sleep(randint(5, 10))
get_proxy_address()
random_ssl_proxy = get_proxy_address()
print(f'Valid proxy address: {random_ssl_proxy}')
# output
Valid proxy address: 98.116.152.143:3128
Обратите внимание, что пакет proxy_checker, который я использовал, не имеет встроенной обработки ошибок, поэтому вам придется добавить некоторые из них, чтобы отловить некоторые ошибки.
Я добавил в свой ответ код проверки прокси, который может быть вам полезен.