Custom headers in Phantomjs Selenium WebDriver
The latest version (1.9.1) of PhantomJS is release Jun/5/2013. The pull request is merged Jun/23/2013.
If you are using 1.9.1 version of PhantomJS, custom headers will not work.
You have to build phantomjs yourself or wait until phantomjs merge ghostdriver changes and release new version.
- Clone PhantomJS repository
- Clone ghostdriver repository
- copy ghostdriver/src/* to phantomjs/src/ghostdriver recursively
- build phantomjs
Using newly build phantomjs I got following result:
from selenium import webdriverwebdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.Accept-Language'] = 'ru-RU'driver = webdriver.PhantomJS()driver.get('http://httpbin.org/headers')print(driver.page_source)
...{ "headers": { "Connection": "close", "Host": "httpbin.org", "Accept-Encoding": "gzip", "Accept-Language": "ru-RU", "User-Agent": "Mozilla/5.0 (Unknown; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.10.0 (development) Safari/534.34", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" } ...
UPDATE
Use PhantomJS 1.9.2+.
I write a full example to set all headers , window size and proxy in selenium phantomjs:
from selenium import webdriverdef init_phantomjs_driver(*args, **kwargs): headers = { 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0', 'Connection': 'keep-alive' } for key, value in headers.iteritems(): webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.{}'.format(key)] = value webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36' driver = webdriver.PhantomJS(*args, **kwargs) driver.set_window_size(1400,1000) return driverdef main(): service_args = [ '--proxy=127.0.0.1:9999', '--proxy-type=http', '--ignore-ssl-errors=true' ] driver = init_phantomjs_driver(service_args=service_args) driver.get('http://cn.bing.com')
Note:
userAgent
is set in phantomjs.page.settings.userAgent
instead of phantomjs.page.customHeaders