Code Monkey home page Code Monkey logo

Comments (2)

riordan avatar riordan commented on June 8, 2024 1

Thank you, @elacuesta! This is excellent context (and fantastic documentation).

Based on a cursory readthrough of scrapy-autounit, the way it implements callbacks is promising 🤞.

Sadly, I wound up abandoning contracts for the above scrapy project; it turns out that when you're using attrs or dataclasses based items, the contract behaves as if all fields are being returned 🤔. Autounit might wind up working out better overall.

Closing for now, but will update once I've tried autounit on the playwright spiders.

from scrapy-playwright.

elacuesta avatar elacuesta commented on June 8, 2024

I'd suggest you to request the ability to use contracts with async callbacks to upstream Scrapy.
In the past I've used scrapy-autounit, although I haven't tested it with async callbacks so it might also not work for your case.

Finally, one (maybe hacky) way could be to emulate the scrapy-playwright tests themselves. See for instance make_handler, which creates a ScrapyPlaywrightDownloadHandler object that can be used to directly retrieve a response to be processed with your callback to check if the result is what you expect (similar to this test). This is not ideal because you'd be using a private handler method, I don't have any plans to change this but just be advised.
I think this could be optimized by recording responses in HAR the first time (see the record_har_path & record_har_content arguments for Browser.new_context, which you can handle via the PLAYWRIGHT_CONTEXTS setting), and then routing either the context or the page to use the HAR to serve the responses (should be possible with a page init callback).

For the record, I haven't tried any of this myself, I'm just thinking out loud. Perhaps this is something that could be more easily integrated, I'm open to suggestions.

from scrapy-playwright.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.