очистить сайт Dynami c ajax, используя селен в python с заголовками cook ie - PullRequest
0 голосов
/ 31 марта 2020

Я хочу, чтобы содержимое находилось в ключе данных на страницах элемента [1], как показано ниже: https://www.banque-france.fr/en/ajax/pagination/news/communique-de-presse?selector=bdf-page-list-news-form&page=1

Теперь открывается первый раз выше (или попробуйте в частный браузер) он не будет отображаться в разделе данных. Сохраняя указанную ссылку открытой на отдельной вкладке, и если следующую страницу посещают на отдельной вкладке: https://www.banque-france.fr/en/news/communique-de-presse

Затем на исходную вкладку отправляется ссылка sh, гораздо больше видно в разделе данных.

Это подтверждает, что для первой страницы, страницы, которую я должен sh очистить, требуется аутентификация cook ie. URL-адрес страницы был взят из запроса AJAX, который можно увидеть на вкладке «Проверка сети» при переключении номеров страниц в пределах https://www.banque-france.fr/en/news/communique-de-presse

Для решения проблемы сначала требуя аутентификации на основе cook ie, я сначала захожу на https://www.banque-france.fr/en/news/communique-de-presse с использованием веб-драйвера Selenium, чтобы получить cook ie и идентификатор сеанса, перед отправкой с python запросами POST. К сожалению, однако, даже несмотря на то, что заголовки запроса во всех отношениях выглядят так же, как и в браузере, время отправки запроса истекает. Обратите внимание, что для запуска кода требуется веб-драйвер Selenium

from selenium import webdriver
import requests
import logging

logging.basicConfig()
logger = logging.getLogger()
logger.setLevel( logging.DEBUG)

browser = webdriver.Chrome( *<path to webdriver>* )

home_url = "https://www.banque-france.fr/en/news/communique-de-presse" 

browser.get( home_url)
cookies = browser.get_cookies()

ajax_url = "https://www.banque-france.fr/en/ajax/pagination/news/communique-de-presse?selector=bdf-page-list-news-form&page=1"

session = f"{ cookies[2].get( 'name')}={ cookies[2].get( 'value')}"
hasJs = f"{ cookies[1].get( 'name')}={ cookies[1].get( 'value')}"
atIdVisitor = f"{ cookies[ 0].get( 'name')}={ cookies[0].get( 'value')}"

cookieString = f"{ hasJs}; { atIdVisitor}; { session}"
logger.debug( f"{ cookieString=}")

headers = {
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-GB,en;q=0.5",
    "Connection": "keep-alive",
    "Content-Length": "22523",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie": cookieString, 
    "Host": "www.banque-france.fr",
    "Origin": "https://www.banque-france.fr",
    "Referer": "https://www.banque-france.fr/en/news/communique-de-presse",
    "TE": "Trailers",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest"
}

response = requests.post(
        "https://www.banque-france.fr/en/ajax/pagination/news/communique-de-presse?selector=bdf-page-list-news-form&page=1",
        headers=headers
    )

logger.debug( f'{ response=}')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...