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