我正在尝试使用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
但它不起作用。
有关如何使其发挥作用的任何建议?
答案 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)])