我正在尝试使用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;主机名,但我需要它没有那个
答案 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填充*。