Python - Изменение IP-адреса во время селен работает?
Это может быть странно, мои извинения. Как изменить IP во время работы селена?
Вот что я попробовал:
Я сделал скрипт, который использует селен и меняет его IP, используя stem и прокси socks5. Кстати, я использую веб-драйвер Firefox.
Вот сценарий, который просто изменяет IP и печатает его, используя stem и socks5:
import time, sys, socks, socket
from stem import Signal
from stem.control import Controller
from stem.connection import connect
from urllib2 import urlopen
with Controller.from_port(port = 9051) as controller:
controller.authenticate()
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
while True:
ip = urlopen("http://ip.42.pl/raw").read()
print(ip)
controller.signal(Signal.NEWNYM)
time.sleep(controller.get_newnym_wait())
Ну, скрипт работает ОТЛИЧНО. Но проблема возникает, когда мне также нужен селен.
from selenium import webdriver
import sys, socks, socket, time
from stem import Signal
from stem.control import Controller
from stem.connection import connect
from urllib2 import urlopen
with Controller.from_port(port = 9051) as controller:
controller.authenticate()
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
driver = webdriver.Firefox() # These are the cause of the errors
while True:
driver.get("www.google.com") # These are the cause of the errors
ip = urlopen("http://ip.42.pl/raw").read()
print(ip)
controller.signal(Signal.NEWNYM)
time.sleep(controller.get_newnym_wait())
Если я запускаю скрипт с селеном, я получаю общее сообщение об ошибке сервера socks.
Traceback (most recent call last):
File "2", line 12, in <module>
driver = webdriver.Firefox() # These are the cause of the errors
File "/usr/local/lib/python2.7/dist-
packages/selenium/webdriver/firefox/webdriver.py", line 148, in __init__
self.service.start()
File "/usr/local/lib/python2.7/dist-
packages/selenium/webdriver/common/service.py", line 97, in start
if self.is_connectable():
File "/usr/local/lib/python2.7/dist-
packages/selenium/webdriver/common/service.py", line 113, in is_connectable
return utils.is_connectable(self.port)
File "/usr/local/lib/python2.7/dist-
packages/selenium/webdriver/common/utils.py", line 106, in is_connectable
socket_ = socket.create_connection((host, port), 1)
File "/usr/lib/python2.7/socket.py", line 566, in create_connection
sock.connect(sa)
File "/usr/local/lib/python2.7/dist-packages/socks.py", line 96, in wrapper
return function(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/socks.py", line 813, in
connect
negotiate(self, dest_addr, dest_port)
File "/usr/local/lib/python2.7/dist-packages/socks.py", line 477, in
_negotiate_SOCKS5
CONNECT, dest_addr)
File "/usr/local/lib/python2.7/dist-packages/socks.py", line 552, in
_SOCKS5_request
raise SOCKS5Error("{0:#04x}: {1}".format(status, error))
socks.SOCKS5Error: 0x01: General SOCKS server failure
Что ж, это лучшее, что я могу сделать, я хочу, чтобы мой скрипт продолжал менять свой IP в цикле, и все остальные вопросы как раз о начале селена. Есть ли способ сделать это? Как изменить IP в цикле, когда селен работает? Если ваш метод использует stem и socks5, то я буду счастлив, потому что мне не нужно будет редактировать мой сценарий и все остальные, но и другой метод будет в порядке. Просто мне нужно, чтобы это сработало.
Помощь будет оценена много,
С уважением, Джастин