使用PhantomJS代理身份验证

时间:2017-06-21 12:47:13

标签: python selenium authentication scrapy phantomjs

我正在尝试使用PhantomJS和Python对代理服务器进行身份验证。 这就是我所拥有的

service_args = [
         '--proxy=http://us-ny.proxymesh.com:31280',
         '--proxy-type=http',

 ]

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

 capa = DesiredCapabilities.PHANTOMJS
 capa['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token

 driver = webdriver.PhantomJS( desired_capabilities=capa, service_args=service_args)

 driver.get(request.url)
 body = driver.page_source
 print body

这只打印出来

<html><head></head><body></body></html>

只是为了澄清一下,当我将我的IP添加到代理服务器时,这是有效的 - 经过身份验证的IP&amp;主机名,但我需要它没有那个

2 个答案:

答案 0 :(得分:1)

这是我的解决方案。我最终需要传递service_args和amp;中的凭据。作为proxy-auth标题。

service_args = [
    "--ignore-ssl-errors=true",
    "--ssl-protocol=any",
    "--proxy={}".format(proxy),
    "--proxy-type=http",
]

caps = DesiredCapabilities.PHANTOMJS

authentication_token = "Basic " + base64.b64encode(b'{}:{}'.format(username, password))

caps['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token

self.driver = webdriver.PhantomJS(
        service_args=service_args,
        desired_capabilities=caps,
        executable_path="./phantomjs-2.1.1-linux-x86_64/bin/phantomjs")

将代理的结构定义为http://username:password@domain:port

我不知道为什么你要重复凭证。我猜测第一个auth参数没有作为标题传递给代理,所以你需要手动完成这两个参数。

答案 1 :(得分:0)

您必须使用WebDriverWait等待驱动程序加载网站,一旦打印完源代码,就必须这样做。

from selenium.webdriver.support.ui import WebDriverWait
service_args = [
         '--proxy=http://us-ny.proxymesh.com:31280',
         '--proxy-type=http',

 ]

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

 capa = DesiredCapabilities.PHANTOMJS
 capa['phantomjs.page.customHeaders.Proxy-Authorization'] = authentication_token

 driver = webdriver.PhantomJS( desired_capabilities=capa, service_args=service_args)

 driver.get(request.url)
 WebDriverWait(driver, *).until(lambda driver: driver.find_element_by_xpath(*)
 body = driver.page_source
 print body

使用您想要等待的元素的秒数,xpath填充*。