Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

не работает socks5 proxy в связке Python3 Selenium3 Phantomjs2

#python #proxy #selenium #phantomjs #socks5


Вот код который пытаюсь выполнить:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

ua = dict(DesiredCapabilities.PHANTOMJS)
ua["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Windows NT 10.0; Win64;
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36")
service_args = ['--proxy=109.228.147.75:45554','--proxy-type=socks5','--load-images=false','--ignore-ssl-errors=true']
browser = webdriver.PhantomJS(desired_capabilities=ua, service_args=service_args)
browser.set_window_size(1920, 1080)
browser.get('http://www.ip-adress.com/')
time.sleep(10)
browser.save_screenshot('screen_test.png')


Если использовать socks5, то при выполнении кода PhantomJS не может загрузить сайт,
оставаясь в подвешенном состоянии, можно ждать вечность и ничего не произойдёт. Если
завершить процесс PhantomJS то IDLE прервётся на команде:

browser.get('http://www.ip-adress.com/')


В Мозиле (не в коде, а просто в окне) с этим же proxy сайт открывается.

Если заменить прокси на https тип, то всё заработает.

Однако, через socks5 загружается http://example.com/. То есть только он. Ни один
другой сайт не грузится. => Из-за этого подозреваю что проблема с DNS запросами, но
как это фиксить?

Python 3.5 / Selenium 3.0.1 / PhantomJS 2.1.1
    


Ответы

Ответ 1



Всё дело в самом proxy. Я так до конца и не понял в чём всё же фишка, но как итог, нужно проверять proxy на работающий DNS Forwarding. Просто работающих соксов много, а вот с адекватным DNS F мне как-то попалось значительно меньше. Как я понял, PhantomJS при использовании socks5 по умолчанию использует DNS Forwarding, по этому и ждёт, когда-же сервер ему ответит. Однако настройки как в Мозиле: у Фантома нет, и отключить проксирование DNS запросов у Фантома нельзя. Хотя я не исключаю, что не прав до сих пор, и реально ответ в другом. Спасибо))

Комментариев нет:

Отправить комментарий