Запуск селен за прокси-сервером
Я использовал селен для автоматического моделирования браузеров и просмотра веб-страниц в Python, и это хорошо сработало для меня. Но теперь я должен запустить его за прокси-сервером. Так что теперь селен открывает окно, но не может открыть запрошенную страницу из-за настроек прокси, не установленных в открытом браузере. Текущий код выглядит следующим образом (пример):
from selenium import webdriver
sel = webdriver.Firefox()
sel.get('http://www.google.com')
sel.title
sel.quit()
Как мне изменить вышеуказанный код для работы с прокси-сервером сейчас?
5 ответов
Вам нужно установить желаемые возможности или профиль браузера, например:
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "proxy.server.address")
profile.set_preference("network.proxy.http_port", "port_number")
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)
Также смотрите связанные темы:
Официальная документация Selenium ( http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp) содержит четкие и полезные рекомендации по использованию прокси. Для Firefox (который является предпочтительным браузером в вашем примере кода) вы должны сделать следующее:
from selenium import webdriver
from selenium.webdriver.common.proxy import *
myProxy = "host:8080"
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': myProxy,
'ftpProxy': myProxy,
'sslProxy': myProxy,
'noProxy': '' # set this value as desired
})
driver = webdriver.Firefox(proxy=proxy)
Это сделает работу:
import selenium
from selenium.webdriver.common.proxy import *
proxyHost = "my.proxy.host or IP"
proxyPort = "55555"
fp = webdriver.FirefoxProfile()
fp.set_preference("network.proxy.type", 1)
#fp.set_preference("network.proxy.http", proxyHost) #HTTP PROXY
#fp.set_preference("network.proxy.http_port", int(proxyPort))
#fp.set_preference("network.proxy.ssl", proxyHost) #SSL PROXY
#fp.set_preference("network.proxy.ssl_port", int(proxyPort))
fp.set_preference('network.proxy.socks', proxyHost) #SOCKS PROXY
fp.set_preference('network.proxy.socks_port', int(proxyPort))
fp.update_preferences()
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("http://www.whatismyip.com/")
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.firefox.options import Options
proxy = "xxx.xx.xx.xxxx"
port = 8080
options = Options()
options.set_preference("network.proxy.type", 1)
options.set_preference("network.proxy.http", proxy)
options.set_preference("network.proxy.http_port", port)
options.set_preference("network.proxy.https", proxy)
options.set_preference("network.proxy.https_port", port)
ser = Service(r"C:/Users/geckodriver.exe")
driver = webdriver.Firefox(service=ser, options=options)
def install_proxy(PROXY_HOST,PROXY_PORT):
fp = webdriver.FirefoxProfile()
print PROXY_PORT
print PROXY_HOST
fp.set_preference("network.proxy.type", 1)
fp.set_preference("network.proxy.http",PROXY_HOST)
fp.set_preference("network.proxy.http_port",int(PROXY_PORT))
fp.set_preference("network.proxy.https",PROXY_HOST)
fp.set_preference("network.proxy.https_port",int(PROXY_PORT))
fp.set_preference("network.proxy.ssl",PROXY_HOST)
fp.set_preference("network.proxy.ssl_port",int(PROXY_PORT))
fp.set_preference("network.proxy.ftp",PROXY_HOST)
fp.set_preference("network.proxy.ftp_port",int(PROXY_PORT))
fp.set_preference("network.proxy.socks",PROXY_HOST)
fp.set_preference("network.proxy.socks_port",int(PROXY_PORT))
fp.set_preference("general.useragent.override","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A")
fp.update_preferences()
return webdriver.Firefox(firefox_profile=fp)