首页 > 解决方案 > 检查器蟒蛇硒

问题描述

我决定为 Instagram 帐户创建一个检查器。请告诉我如何在重新启动浏览器时更改 ip。我有一个 Tor 个人资料。即ip每10分钟自动变化一次。如何使 ip 每分钟更改 1 次。这甚至可能吗?也许有某种 set_preference 设置,或者在使用 Tor 设置重新启动 Firefox 浏览器时通常如何更改 ip。

import time
from selenium import webdriver
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

file = open('Good2.txt', encoding='utf-8-sig').read().split('\n')
goods = open('good_acc.txt', 'a+')


def settings_browser():
    """ Настройки браузера FireFox. """
    profile = FirefoxProfile(r'C:\Users\ASUS\Desktop\Scrape\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default')
    profile.set_preference('network.proxy.type', 1)
    profile.set_preference('network.proxy.socks', '127.0.0.1')
    profile.set_preference('network.proxy.socks_port', 9050)
    profile.set_preference("network.proxy.socks_remote_dns", False)
    # get a huge speed increase by not downloading images
    profile.set_preference("permissions.default.image", 2)
    profile.update_preferences()
    return profile


def check_email():
    """ Принимает всплывающее окно куки. Чекает валидность почт, если почта валидна, то сохраняет в файл 'good_acc.txt'. """

    driver = webdriver.Firefox(firefox_profile=settings_browser(), executable_path=r'C:\Users\ASUS\Desktop\Scrape\geckodriver.exe')

    for login in file:
        driver.get("https://www.instagram.com/accounts/password/reset/")

        body = driver.find_elements_by_class_name('pbNvD.FrS-d.gD9tr')

        for bd in body:
            if bd.find_element_by_class_name('aOOlW.bIiDR').text == 'Принять все':
                bd.find_element_by_class_name('aOOlW.bIiDR').click()
                time.sleep(7)

        authorization = driver.find_elements_by_class_name("AHCwU")
        pops = driver.find_elements_by_class_name("_-rjm")

        username = login.split(":")[0]
        password = login.split(":")[1]

        for data in authorization:
            # почта логин
            data_login = data.find_element_by_name('cppEmailOrUsername')
            data_login.click()
            data_login.send_keys(username)

            time.sleep(1)

            # кнопка входа
            clock_button = data.find_element_by_class_name('sqdOP.L3NKy.y3zKF')
            clock_button.click()

            time.sleep(2)

            for pop in pops:
                if 'Мы отправили ссылку для восстановления' in pop.find_element_by_class_name('tA2fc').text:
                    # Почта зарегана
                    goods.write(username + ' : ' + password + '\n')
                    print('Валидный аккаунт ' + username + ' : ' + password)

                elif 'Подождите несколько минут, прежде чем пытаться снова.' in pop.find_element_by_class_name('tA2fc').text:
                    driver.quit()
                    driver = webdriver.Firefox(firefox_profile=settings_browser(), executable_path=r'C:\Users\ASUS\Desktop\Scrape\geckodriver.exe')
                    print('Успешная перезагрузка драйвера из-за "Подождите несколько минут, прежде чем пытаться снова."')

                elif 'feedback_required' in pop.find_element_by_class_name('tA2fc').text:
                    driver.quit()
                    driver = webdriver.Firefox(firefox_profile=settings_browser(), executable_path=r'C:\Users\ASUS\Desktop\Scrape\geckodriver.exe')
                    print('Успешная перезагрузка драйвера из-за "feedback_required"')
                else:
                    # Почта не зарегана
                    print(f"Не валидный аккаунт " + username)
    goods.close()


def main():
    check_email()


if __name__ == '__main__':
    main()

标签: pythonseleniumtor

解决方案


如果您在配置文件中设置ControlPort: 9051(和Passord: ...)(在 Linux 上/etc/tor/torrc),那么您甚至可以使用标准socket发送信号tor来更改 IP。

import socket

s = socket.socket()
s.connect(('127.0.0.1', 9051))
s.send('AUTHENTICATE "your_passord"\r\nSIGNAL NEWNYM\r\n'.encode())

需要几秒钟才能从tor network.
几秒钟后代理应该使用新的IP。


您也可以stem为此使用模块(它还需要在 中进行设置torrc

from stem import Signal
from stem.control import Controller

with Controller.from_port(port=9051) as controller:
    controller.authenticate(password='your_password')
    controller.signal(Signal.NEWNYM)

更多:Python:如何使用 Tor 网络请求更改 IP?


编辑:

import socket

def main():
    # send signal to `tor` to change IP
    s = socket.socket()
    s.connect(('127.0.0.1', 9051))
    s.send('AUTHENTICATE "your_passord"\r\nSIGNAL NEWNYM\r\n'.encode())

    # wait few seconds for new IP
    time.sleep(3)

    check_email()

推荐阅读