2016-09-04 19 views
6

Próbuję ustawić proxy dla webscraping przy użyciu selenu + phantomjs. Używam Pythona.phantomjs + selen w python proxy-auth nie działa

Widziałem w wielu miejscach, że istnieje błąd w phantomjs, taki że proxy-auth nie działa.

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 

Pełnomocnik siatki proponuje zastosowanie następujące zamiast:

page.customHeaders = { 'pośredniej autoryzacji': 'podstawowe '+ btoa (': Hasło')};

, ale nie jestem pewien, jak to przetłumaczyć na pytona.

To co obecnie mam:

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 

ale to nie działa.

Jakieś sugestie, jak mogę to uruchomić?

+0

Czy potrzebujesz użyć Selenium i PhantomJS? W przypadku skriningu internetowego powinny istnieć opcje bardziej elastyczne. –

+0

Muszę zeskanować stronę javscript. Wszelkie sugestie dotyczące tego, czego jeszcze mogę użyć? – chris

+0

Brak lepszej sugestii w tym przypadku. –

Odpowiedz

4

Mam kompilacji odpowiedź od: How to correctly pass basic auth (every click) using Selenium and phantomjs webdriver jak: base64.b64encode error

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://...") 
+0

Niewiarygodne. utknąłem na tym przez tygodnie. Dzięki! – chris

+0

Niesamowite, nie ma za co! – jinksPadlock

+0

Czy otrzymałeś nagrodę? Nigdy wcześniej tego nie używałam, więc nie wiem, czy muszę zrobić cokolwiek innego, by dać ci nagrodę. – chris

3

Rozwiązanie z DesiredCapabilities nie działa dla mnie. Skończyło się na następującym rozwiązaniu:

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)])