Итак, я пытаюсь перейти к этому URL: https://www.instacart.com/store/wegmans/search_v3/horizon%201%25
и очистить данные из div с помощью класса item-name item-row
.Однако есть две основные проблемы: во-первых, instacart.com требует входа в систему, прежде чем вы сможете получить этот URL-адрес, а во-вторых, большая часть страницы создается с помощью javascript.
Я считаю, чторешил первую проблему, потому что мой session.post(...)
получает код ответа 200.Я также почти уверен, что r.html.render()
должен решить вторую проблему путем рендеринга сгенерированного javascript html до того, как я его поцарапал.К сожалению, последняя строка в моем коде возвращает только пустой список, несмотря на то, что у селена не было проблем с получением этого элемента.Кто-нибудь знает, почему это не работает?
from requests_html import HTMLSession
from bs4 import BeautifulSoup
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
session = HTMLSession()
res1 = session.get('http://www.instacart.com', headers=headers)
soup = BeautifulSoup(res1.content, 'html.parser')
token = soup.find('meta', {'name': 'csrf-token'}).get('content')
data = {"user": {"email": "alexanderjbusch@gmail.com", "password": "password"},
"authenticity_token": token}
response = session.post('https://www.instacart.com/accounts/login', headers=headers, data=data)
print(response)
r = session.get("https://www.instacart.com/store/wegmans/search_v3/horizon%201%25", headers=headers)
r.html.render()
print(r.html.xpath("//div[@class='item-name item-row']"))