Создание списка действительных IP-адресов и случайное использование в цикле Python Selenium - PullRequest
0 голосов
/ 24 ноября 2018

Отказ от ответственности: Это мой первый набросок поиска в Интернете

У меня есть список из ~ 400 URL-адресов результатов поиска, которые я пытаюсь перебрать с помощью Selenium для сбора информации.В какой-то момент меня перенаправили и представили следующий текст:

"Ваш доступ к VINELink.com был отклонен из-за более высоких, чем обычно, уровней использования ... Вы пытаетесь получить доступ к этомувеб-сайт со следующего IP-адреса. Убедитесь, что настройки брандмауэра не ограничивают доступ. [МОЙ IP-АДРЕС] "

Есть ли способ создать список действительных случайных IP-адресов, выберите один случайным образом?в цикле и передать его в Selenium WebDriver, чтобы избежать блокировки?

Я понимаю, что у этого вопроса есть этические соображения (на самом деле, я связался с сайтом, чтобы объяснить мой случай использования и спросить,они могут разблокировать мой реальный IP-адрес);Меня больше всего интересует, можно ли это сделать.

Сокращенный список URL-адресов:

['http://www.vinelink.com/vinelink/servlet/SubjectSearch?siteID=34003&agency=33&offenderID=2662',
 'http://www.vinelink.com/vinelink/servlet/SubjectSearch?siteID=34003&agency=33&offenderID=A21069',
 'http://www.vinelink.com/vinelink/servlet/SubjectSearch?siteID=34003&agency=33&offenderID=B59293',
 ...]

Сокращенный код цикла (отсутствует фактический список действительных IP-адресов):

info = {}

for url in detail_urls:

    proxy = ### SELECT RANDOM IP ADDRESS FROM A LIST OF VALID IP ADDRESSES ###

    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--proxy-server='+str(proxy))
    driver = webdriver.Chrome(executable_path='/PATH/chromedriver', options=chrome_options)
    driver.get(url)
    driver.implicitly_wait(3)

    if drive.find_element_by_xpath('//*[@id="ngVewDiv"]/div/div/div/div[3]/div[3]/div[2]/div/search-result/div/div[4]/div[1]/more-info/div[1]/button'):
        button = driver.find_element_by_xpath('//*[@id="ngVewDiv"]/div/div/div/div[3]/div[3]/div[2]/div/search-result/div/div[4]/div[1]/more-info/div[1]/button').click() 
        name = driver.find_element_by_xpath('//*[@id="ngVewDiv"]/div/div/div/div[3]/div[3]/div[2]/div/search-result/div/div[1]/div/div[1]/span[1]/span[1]/div/div/div[2]/span')
        name = name.text
        offenderid = driver.find_element_by_xpath('//*[@id="ngVewDiv"]/div/div/div/div[3]/div[3]/div[2]/div/search-result/div/div[4]/div[1]/more-info/div[2]/div/div/div[2]/div[1]/div/div[2]/span')
        offenderid = offenderid.text
        info[name] = [offenderid]
        driver.close()
    else:
        driver.close()

1 Ответ

0 голосов
/ 24 ноября 2018

Есть ли способ создать список действительных случайных IP-адресов, выбрать один случайным образом в цикле и передать его в Selenium WebDriver, чтобы избежать блокировки?

Чтобы получитьслучайный элемент из последовательности, используйте random.choice(seq) из модуля random.

см .: https://docs.python.org/3/library/random.html#random.choice

пример:

import random

proxies = ['10.0.1.1', '10.0.1.2', '10.0.1.3']
proxy = random.choice(proxies)

Примечание: ваш вопрос сортироватьиз не имеет смысла, потому что вы заявили, что хотите создать список действительных IP-адресов.Вы не можете просто генерировать случайные IP-адреса и ожидать, что они будут работать ... вы должны предоставить действительные IP-адреса для вашего сценария.Вам понадобится серверная инфраструктура, которая обеспечивает это (т. Е. Пул рабочих прокси-серверов, привязанных к каждому адресу в вашем списке), потому что запросы затем будут направляться через эти серверы.Если вы просто пытаетесь подделать свой IP и у вас нет пула серверов для прокси, ответ будет «Нет, это не сработает».

...