python proxy-auth中的phantomjs + selenium无效

时间:2016-09-04 02:48:06

标签: python selenium proxy phantomjs

我正在尝试使用selenium + phantomjs设置webscraping的代理。我正在使用python。

我在许多地方都看到phantomjs中存在一个错误,即proxy-auth不起作用。

from selenium.webdriver.common.proxy import *
from selenium import webdriver
from selenium.webdriver.common.by import By
service_args = [
'--proxy=http://fr.proxymesh.com:31280',
'--proxy-auth=USER:PWD',
'--proxy-type=http',
]

driver = webdriver.PhantomJS(service_args=service_args)
driver.get("https://www.google.com")
print driver.page_source

代理网格建议使用以下代码:

  

page.customHeaders = {'代理授权':'基本'+ btoa('USERNAME:PASSWORD')};

但我不确定如何将其转换为python。

这就是我目前所拥有的:

from selenium import webdriver
import base64
from selenium.webdriver.common.proxy import *
from selenium import webdriver
from selenium.webdriver.common.by import By

service_args = [
'--proxy=http://fr.proxymesh.com:31280',
'--proxy-type=http',
]

headers = { 'Proxy-Authorization': 'Basic ' +   base64.b64encode('USERNAME:PASSWORD')}

for key, value in enumerate(headers):
    webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.{}'.format(key)] = value

driver = webdriver.PhantomJS(service_args=service_args)
driver.get("https://www.google.com")
print driver.page_source

但它不起作用。

有关如何使其发挥作用的任何建议?

2 个答案:

答案 0 :(得分:5)

我正在编写以下答案: here 以及: How to correctly pass basic auth (every click) using Selenium and phantomjs webdriver

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

service_args = [
    '--proxy=http://fr.proxymesh.com:31280',
    '--proxy-type=http',
]

authentication_token = "Basic " + base64.b64encode(b'username:password')

capa = DesiredCapabilities.PHANTOMJS
capa['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token
driver = webdriver.PhantomJS(desired_capabilities=capa, service_args=service_args)

driver.get("http://...")

答案 1 :(得分:4)

DesiredCapabilities的解决方案对我不起作用。 我最终得到了以下解决方案:

from selenium import webdriver  

driver = webdriver.PhantomJS(executable_path=config.PHANTOMJS_PATH, 
service_args=['--ignore-ssl-errors=true',
    '--ssl-protocol=any',
    '--proxy={}'.format(self.proxy),
    '--proxy-type=http',
    '--proxy-auth={}:{}'.format(self.proxy_username, self.proxy_password)])