Запросы Python запускают файл JS из GET - PullRequest
0 голосов
/ 26 сентября 2019

Цель

Для входа на этот сайт (https://www.reliant.com) с использованием запросов Python и т. Д. (Я знаю, что это можно сделать с помощью selenium, PhantomJS или чего-то еще, нопредпочитаю не делать)

Проблема

Во время входа в систему происходит несколько переадресаций, где передаются параметры типа «идентификатор сеанса». Большинство из них я могу получить, ноесть файл с именем dtPC, который создается из файла cookie, который вы получаете при первом посещении страницы. Насколько я могу судить, файл cookie исходит из этого файла JS (https://www.reliant.com/ruxitagentjs_ICA2QSVfhjqrux_10175190917092722.js). Этот URL-адрес является следующим запросом GETбраузер работает после первоначального GET основного URL. Все методы, которые я до сих пор пробовал, не смогли получить мне этот cookie.

Код до сих пор

from requests_html import HTMLSession

url=r'https://www.reliant.com'
url2=r'https://www.reliant.com/ruxitagentjs_ICA2QSVfhjqrux_10175190917092722.js'
headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
 'Accept-Encoding': 'gzip, deflate, br',
 'Accept-Language': 'en-US,en;q=0.9',
 'Cache-Control': 'max-age=0',
 'Connection': 'keep-alive',
 'Host': 'www.reliant.com',
 'Sec-Fetch-Mode': 'navigate',
 'Sec-Fetch-Site': 'none',
 'Sec-Fetch-User': '?1',
 'Upgrade-Insecure-Requests': '1',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.3'
}

headers2={
'Referer': 'https://www.reliant.com',
 'Sec-Fetch-Mode': 'no-cors',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}

s=HTMLSession()
r=s.get(url,headers=headers)
js=s.get(url2,headers=headers2).text

r.html.render() #works but doesn't get the cookie
r.html.render(script=js) #fails on Network error

1 Ответ

0 голосов
/ 26 сентября 2019

Хорошо, я понял это, несмотря на то, что он боролся со мной весь путь.Ясно, почему dtPC не показывался в s.cookies так, как должен, но я не совсем правильно использовал ключевое слово script.Очевидно, что независимо от того, что вы передадите JS, оно будет выполнено после того, как все остальное будет отрендерено, как вы открыли консоль в своем браузере и вставили ее туда.Когда я действительно попробовал это в Chrome, я получил некоторые ошибки.В конце концов я понял, что могу просто запустить простой JS-скрипт, чтобы вернуть куки, сгенерированные другим JS.

s=HTMLSession()
r=s.get(url,headers=headers)
print(r.status_code)

c=r.html.render(script='document.cookie') 

c=urllib.parse.unquote(c)
c=[x.split('=') for x in c.split(';')]
c={x[0]:x[1] for x in c}
print(c)

в этот момент c будет диктовкой с 'dtPC' в качестве ключа и соответствующим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...