Вращающиеся прокси и пользовательские агенты с селеном chrome на python - PullRequest
0 голосов
/ 02 февраля 2020

Я столкнулся с проблемой при попытке автоматизировать некоторые тесты с веб-драйвером selenium chrome на python. Моя цель - переключать user-agent и proxy-сервер после каждого моего запроса, чтобы избежать запрета. Вот мой код:

from selenium import webdriver
import time
import random
from fake_useragent import UserAgent
from datetime import datetime as dt


def add_random_ua():
    # Generate a random user-agent useing fake_useragent library
    fake_ua = UserAgent().random
    # If there is already a "user-agent" argument in options delete it
    for item in options.arguments:
        if '--user-agent=' in item:
            options.arguments.remove(item)
    # Add generated user-agent to options
    options.add_argument(f'--user-agent={fake_ua}')
    print(f'User-agent: {fake_ua}')


def add_random_proxy():
    # Same logic as with add_random_ua
    # PROXY_LIST is just a list read from .txt file
    random_proxy = PROXY_LIST[random.randint(0, len(PROXY_LIST) - 1)]
    for item in options.arguments:
        if '--proxy-server=' in item:
            options.arguments.remove(item)
    options.add_argument(f'--proxy-server={random_proxy}')
    print(f'Proxy-server: {random_proxy}')

chromedriver = 'C:\\Users\\User\\Desktop\\chromedriver\\chromedriver.exe'
# Initial chromedriver options
options = webdriver.ChromeOptions()
options.add_argument("--window-size=1024,768")
options.add_argument("--disable-notifications")
options.add_argument("--disable-popup-blocking")
options.add_argument("--user-data-dir=C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\User Data")
options.add_argument("--profile-directory=Default")
options.add_argument("--ignore-certificate-errors")

while True:
    print(f'Timestamp: {dt.now().strftime("%Y-%m-%d %H:%M:%S")}')
    add_random_ua()
    add_random_proxy()
    web = webdriver.Chrome(chromedriver, options=options)
    web.implicitly_wait(30)
    web.get(URL)

    # Some testing code...

    web.quit()

Итак, основа c logi c скрипта состоит в том, чтобы установить некоторые исходные параметры chromedriver, а затем добавить случайный прокси-сервер и пользовательский агент. L oop, создать экземпляр веб-драйвера с новыми параметрами, выполнить некоторый код, уничтожить веб-драйвер с помощью .quit (), а затем снова выполнить все эти вещи.

Основная проблема заключается в том, что он не работает с add_random_proxy () - каждый время, когда я не могу подключиться к inte rnet из-за сбоя прокси-соединения (сами прокси полностью в порядке). Когда я комментирую эту строку, все работает хорошо. Что я делаю не так?

Заранее спасибо!

...