#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 запросов у Фантома нельзя. Хотя я не исключаю, что не прав до сих пор, и реально ответ в другом. Спасибо))
Комментариев нет:
Отправить комментарий