Я пишу несколько тестов с Selenium и заметил, что Referer
отсутствует в заголовках. Я написал следующий минимальный пример, чтобы проверить это с https://httpbin.org/headers:
import selenium.webdriver
options = selenium.webdriver.FirefoxOptions()
options.add_argument('--headless')
profile = selenium.webdriver.FirefoxProfile()
profile.set_preference('devtools.jsonview.enabled', False)
driver = selenium.webdriver.Firefox(firefox_options=options, firefox_profile=profile)
wait = selenium.webdriver.support.ui.WebDriverWait(driver, 10)
driver.get('http://www.python.org')
assert 'Python' in driver.title
url = 'https://httpbin.org/headers'
driver.execute_script('window.location.href = "{}";'.format(url))
wait.until(lambda driver: driver.current_url == url)
print(driver.page_source)
driver.close()
Какие отпечатки:
{
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "close",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0"
}
}
Так что нет Referer
. Однако, если я перехожу на любую страницу и вручную выполняю
window.location.href = "https://httpbin.org/headers"
в консоли Firefox, Referer
действительно отображается как ожидалось.
Как указано в комментариях ниже, при использовании
driver.get("javascript: window.location.href = '{}'".format(url))
вместо
driver.execute_script("window.location.href = '{}';".format(url))
запрос включает Referer
. Кроме того, при использовании Chrome вместо Firefox оба метода включают Referer
.
Таким образом, главный вопрос остается открытым: почему Referer
отсутствует в запросе при отправке с Firefox, как описано выше?