Код: Выделить всё
import scrapy
from playwright.async_api import Page
from scrapy_playwright.page import PageMethod
async def login(page : Page) -> str:
await page.wait_for_selector(selector="button[data-automation='signin-btn']")
await page.locator("button[data-automation='signin-btn']").click()
await page.wait_for_selector("button[data-automation='sign-in-button']")
await page.locator("input[name=txtusername]").click()
await page.locator("input[name=txtusername]").fill("00000")
await page.locator("input[name=txtpassword]").click()
await page.locator("input[name=txtpassword]").fill("11111")
await page.locator(selector = "button[data-automation='sign-in-button']").click()
return page.url
class MySpider(scrapy.Spider):
name = "myspider"
custom_settings = {
"TWISTED_REACTOR": "twisted.internet.asyncioreactor.AsyncioSelectorReactor",
"DOWNLOAD_HANDLERS": {
"https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
"http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
},
"PLAYWRIGHT_PROCESS_REQUEST_HEADERS": None,
}
def start_requests(self):
yield scrapy.Request(
url="https://mybcmea.bcmea.com",
meta=dict(
#proxy = "http://localhost:8888",
playwright = True,
playwright_page_methods = [
PageMethod(login)
]),
)
def parse(self, response):
pass
Когда я доберусь до этого момента после аутентификации. Все, что мне действительно нужно сделать дальше, это перейти к нескольким URL-адресам. конкретно "/api/board/casual-board?" и получите содержимое JSON. но если я попытаюсь сделать это в своем методе parse(), я получу ошибку 401. Я могу продолжить навигацию, чтобы открыть следующую страницу, и циклически переключаться между вещами, как будто я браузер, но затем я собираюсь мне приходится анализировать html со страницы драматурга, когда у меня есть отличный json-объект всего, что я хочу, поступающего от API...
т.е. Если я изменю свой метод анализа на этот после аутентификации, я получу ошибку 401.
Код: Выделить всё
def parse(self, response):
parsed_url = urlparse(response.url)
Path(quote(f"./original/{response.request.method}{parsed_url.path}-{parsed_url.query}")).write_bytes(response.body)
yield scrapy.Request(
"https://mybcmea.bcmea.com/api/board/casual-board?",
meta=dict(
playwright = True,
)
callback=self.navigate_to_boards,
)
def navigate_to_boards(self, response):
pass
Код: Выделить всё
def parse(self, response):
parsed_url = urlparse(response.url)
Path(quote(f"./original/{response.request.method}{parsed_url.path}-{parsed_url.query}")).write_bytes(response.body)
page = response.meta['playwright_page']
yield scrapy.Request(
url = "https://mybcmea.bcmea.com/api/board/casual-board?",
meta=dict(
playwright = True,
playwright_page = page
),
callback=self.navigate_to_boards,
)
Подробнее здесь: https://stackoverflow.com/questions/791 ... logging-in
Мобильная версия