Изменить прокси в Selenium Python

avatar
dasdasddas dsadasd
8 августа 2021 в 17:33
1332
1
0

Здравствуйте, у меня есть код для поворота прокси Firefox, и я его использую, но он не меняет прокси.

Это мой код:

import time
import random
from selenium import webdriver
from selenium.webdriver.common.proxy import *
from http_request_randomizer.requests.proxy.requestProxy import RequestProxy

req_proxy = RequestProxy() #you may get different number of proxy when  you run this at each time
proxies = req_proxy.get_proxy_list() #this will create proxy list

change_proxy = proxies[0].get_address()
print("This is your ip and port: ", change_proxy)

ip = input("Ip: ")
port = input("Port: ")

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", ip)
profile.set_preference("network.proxy.http_port", port)
profile.update_preferences()

driver = webdriver.Firefox(firefox_profile=profile)
driver.get("https://whatismyipaddress.com/");

Я ввожу часть ip и порта из "change_proxy" в ip и порт, и драйвер открывает веб-сайт проверки ip, но ничего не меняется, я вижу свой старый ip:

enter image description here

и мой исходный IP:

enter image description here

Извините за плохой английский.

enter image description here

Источник
Life is complex
10 августа 2021 в 19:38
0

Я добавил в свой ответ код проверки прокси, который может быть вам полезен.

Ответы (1)

avatar
Life is complex
9 августа 2021 в 10:55
0

Сначала позвольте мне сказать, что использование бесплатных 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 для этого сеанса.

enter image description here

Как указывалось ранее, бесплатный прокси может иметь несколько проблем. В приведенном ниже коде показано, как использовать прокси-судью для проверки состояния отдельного прокси-сервера.

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, который я использовал, не имеет встроенной обработки ошибок, поэтому вам придется добавить некоторые из них, чтобы отловить некоторые ошибки.

dasdasddas dsadasd
9 августа 2021 в 13:54
0

Привет! Я проверил ваш код около 20 раз, но страница не загружается :( и я нашел другой код, но он для «хрома», и он работает, но мне нужно сделать это на geckodriver, потому что мой chromedriver такой медленный. Я поставил ошибку, чтобы спросить.

Life is complex
9 августа 2021 в 14:02
0

Как я уже говорил в своем ответе, некоторые бесплатные прокси не будут работать правильно. Я просто снова запустил код и получил этот прокси `96.9.69.164:53281`. Когда я ссылался на этот прокси-сервер, он был в автономном режиме и так было некоторое время.

Life is complex
9 августа 2021 в 14:04
0

Когда я провел еще один тест, этот адрес был выбран 119.81.189.194:80, что также не сработало. Необходимо добавить дополнительный код для проверки статуса каждого прокси.

dasdasddas dsadasd
9 августа 2021 в 14:25
0

Привет, я снова протестировал код около 100 раз, но он снова не запускает ссылку. Я попробовал другой код для chromedriver, и он работал при первом запуске. Думаю с прокси проблем нет. Пожалуйста, помогите, как я могу исправить thissssssss. Спасибо...

Life is complex
9 августа 2021 в 14:28
0

Проблема заключается в прокси-серверах, потому что некоторые из них будут отключены по тайм-ауту. Вы можете добавить тайм-аут драйвера, который может помочь. Я обновлю свой ответ, чтобы использовать его.

dasdasddas dsadasd
9 августа 2021 в 14:30
0

Также я вижу это в коде: firefox_proxy.ssl_proxy = random_proxy[0].get_address() это для ssl? я вижу http и ftp и в других кодах.

Life is complex
9 августа 2021 в 14:33
0

Я тестировал только HTTPS или SSL в своем коде, потому что хотел, чтобы сеансы были зашифрованы. Потребуется дополнительное тестирование, чтобы определить, как другие протоколы работают с geckodriver и http_request_randomizer.

Life is complex
9 августа 2021 в 14:37
0

Кстати, каков ваш вариант использования прокси с FTP?