Вращающийся IP с селеном и Tor - PullRequest
0 голосов
/ 02 июля 2019

У меня есть конфигурация селена для удаления определенного HTTP-запроса, этот запрос был отправлен только тогда, когда я щелкнул по конкретному элементу REACT на веб-сайте. Вот почему я использую селен ... не могу найти другой путь.

Я должен обновлять свой IP, каждый раз, когда я хочу отменить этот конкретный HTTP-запрос. Для достижения этого я использую Tor. Когда я запускаю свой скрипт на python, он работает очень хорошо, Tor устанавливает новый ip и очищает то, что я хочу. Я добавил try / catch в свой скрипт, если мой скрипт не может работать в первый раз, он будет повторяться 10 раз.

Проблема в том, что когда мой скрипт пытается в другой раз, IP больше не может вращаться ....

как этого добиться?



import time
from random import randint
from time import sleep
import os
import subprocess
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from seleniumwire import webdriver
from selenium.webdriver.firefox.options import Options
from fake_useragent import UserAgent



options_wire = {
    'proxy': {
        'http': 'http://localhost:8088',
        'https': 'https://localhost:8088',
        'no_proxy': ''
    }
}

def firefox_init():
    os.system("killall tor")
    time.sleep(1)
    ua = UserAgent()
    user_agent = ua.random
    subprocess.Popen(("tor --HTTPTunnelPort 8088"),shell=True)
    time.sleep(2)
    return user_agent


def profile_firefox():
    profile = FirefoxProfile()
    profile.set_preference('permissions.default.image', 2)
    profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
    profile.set_preference("general.useragent.override", firefox_init())
    profile.set_preference("driver.privatebrowsing.autostart", True)
    profile.update_preferences()
    return profile



def options_firefox():
    options = Options()
    options.headless = False
    return options


def firefox_closing(driver):
    driver.quit()
    time.sleep(3)
    os.system('killall tor')



def headless(url):
    for x in range(0, 10):
        profile = profile_firefox()
        options = options_firefox()
        driver = webdriver.Firefox(seleniumwire_options=options_wire,firefox_profile=profile, options=options, executable_path='******/headless_browser/geckodriver')
        driver.set_window_position(0, 0)
        driver.set_window_size(randint(1024, 2060), randint(1024, 4100))
        # time.sleep(randint(3,10))
        driver.get(url)
        time.sleep(randint(3,8))
        try:
            if driver.find_element_by_xpath("//*[@id=\"*******\"]/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button"):
                # driver.find_element_by_xpath("//*[@id=\"*******\"]/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button").click()
                # time.sleep(randint(8,10))
                driver.find_element_by_xpath("//*[@id=\"*******\"]/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button").click()
                time.sleep(randint(3,6))
                for request in driver.requests:
                    if request.path == "https://api.*********.***/*******/*********":
                        request_api = request
                        raw = str(request_api.body)
                        request_api = raw.split(('b\''))
                        payload_raw = request_api[1]
                        payload = payload_raw[:-1]
                        if payload:
                            header = request.headers
                            print(header, payload)
                            break
                else:
                    continue
                break

        except:
            firefox_closing(driver)
            time.sleep(5)
        finally:
            firefox_closing(driver)


    return header, payload


url="https://check.torproject.org/?lang=fr"
headless(url)

Спасибо

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Ну, я не могу знать, как он не обновляет IP-адрес, так как вы убиваете процесс tor. Даже если вы поместите tor в качестве службы в Systemd, она, безусловно, возобновится при перезапуске службы. Но я мог бы дать вам несколько указаний:

  • В модуле поддельного агента попробуйте отключить кеш, чтобы избежать кеширования в каталоге / tmp или при использовании сервера размещенного кеша:

    ua = UserAgent(cache=False, use_cache_server=False)

  • Установите Tor на systemd и избегайте использования os.system (), это небезопасно и открыто для множества недостатков, когда вы вводите системные команды прямо в свой скрипт. А с файлом службы вы можете просто перезапустить службу, чтобы обновить свой IP-адрес. Возможно, вы захотите использовать ссылку Arch Linux Wiki для настройки своей собственной среды TOR в здесь !
0 голосов
/ 06 июля 2019

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

Я использовал прокси Browsermob и настроил прокси восходящего потока для работы.В результате вы можете перехватывать каждое HTTP-запрос или ответ, анализировать его и ip вращаться каждый раз и использовать конфигурацию HTTPTunnelPort.

    proxy_params = {'httpProxy': 'localhost:8088', 'httpsProxy': 'localhost:8088'}
    proxy_b = server.create_proxy(params=proxy_params)

Спасибо

...