From 5697c304a4a5abac8cebe8f87c36d459a4c008d5 Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 1 Sep 2023 12:40:04 +0300 Subject: [PATCH 01/12] Added testing of actions --- pytest.ini | 3 ++ tests/actions/constants.py | 23 +++++++++ tests/actions/test_actions.py | 78 +++++++++++++++++++++++++++++ tests/middleware/test_middleware.py | 2 + 4 files changed, 106 insertions(+) create mode 100644 pytest.ini create mode 100644 tests/actions/constants.py create mode 100644 tests/actions/test_actions.py create mode 100644 tests/middleware/test_middleware.py diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..f2dbc34 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] + +pythonpath = /home/matthew/PycharmProjects/scrapy-puppeteer diff --git a/tests/actions/constants.py b/tests/actions/constants.py new file mode 100644 index 0000000..c712ed5 --- /dev/null +++ b/tests/actions/constants.py @@ -0,0 +1,23 @@ +from random import randint +from itertools import combinations + +URLS = ("https://some_url.com", "https://invalid_url.ru", "https://one_more_url.net", "not_url/not_url") +WAIT_UNTIL = ("load", "domcontentloaded", "networkidle0", "networkidle2") +WAIT_OPTS = [None] +SELECTORS = ("nothing", "tr.td::attr(something)", "#button", "") +CLICK_OPTS = [None] + + +def __gen_nav_opts(): + options = [None] + for opt_num in range(1, 5): + for comb in combinations(WAIT_UNTIL, opt_num): + timeout = randint(0, 100) * 1000 + options.append({ + 'timeout': timeout, + 'waitUntil': list(comb), + }) + return options + + +NAV_OPTS = __gen_nav_opts() diff --git a/tests/actions/test_actions.py b/tests/actions/test_actions.py new file mode 100644 index 0000000..f3f6e4b --- /dev/null +++ b/tests/actions/test_actions.py @@ -0,0 +1,78 @@ +from pytest import mark +from scrapypuppeteer.actions import GoTo, GoForward, GoBack, Click, Scroll +from itertools import product +from constants import URLS, NAV_OPTS, WAIT_OPTS, SELECTORS, CLICK_OPTS + + +def _gen_goto(): + for url, nav_opt, wait_opt in product(URLS, NAV_OPTS, WAIT_OPTS): + expected = { + 'url': url, + 'navigationOptions': nav_opt, + 'waitOptions': wait_opt, + } + yield url, nav_opt, wait_opt, expected + + +def _gen_back_forward(): + for nav_opt, wait_opt in product(NAV_OPTS, WAIT_OPTS): + expected = { + 'navigationOptions': nav_opt, + 'waitOptions': wait_opt, + } + yield nav_opt, wait_opt, expected + + +def _gen_click(): + for selector, click_opt, nav_opt, wait_opt in product(SELECTORS, CLICK_OPTS, NAV_OPTS, WAIT_OPTS): + expected = { + 'selector': selector, + 'clickOptions': click_opt, + 'waitOptions': wait_opt, + 'navigationOptions': nav_opt, + } + yield selector, click_opt, nav_opt, wait_opt, expected + + +def _gen_scroll(): + for selector, wait_opt in product(SELECTORS, WAIT_OPTS): + expected = { + 'selector': selector, + 'waitOptions': wait_opt + } + yield selector, wait_opt, expected + + +@mark.parametrize("url, navigation_options, wait_options, expected", + _gen_goto()) +def test_goto(url, navigation_options, wait_options, expected): + action = GoTo(url, navigation_options, wait_options) + assert action.payload() == expected + + +@mark.parametrize("navigation_options, wait_options, expected", + _gen_back_forward()) +def test_go_forward(navigation_options, wait_options, expected): + action = GoForward(navigation_options, wait_options) + assert action.payload() == expected + + +@mark.parametrize("navigation_options, wait_options, expected", + _gen_back_forward()) +def test_go_forward(navigation_options, wait_options, expected): + action = GoBack(navigation_options, wait_options) + assert action.payload() == expected + + +@mark.parametrize("selector, click_options, navigation_options, wait_options, expected", + _gen_click()) +def test_click(selector, click_options, navigation_options, wait_options, expected): + action = Click(selector, click_options, wait_options, navigation_options) + assert action.payload() == expected + + +@mark.parametrize("selector, wait_options, expected", + _gen_scroll()) +def test_scroll(selector, wait_options, expected): + action = Scroll(selector, wait_options) + assert action.payload() == expected diff --git a/tests/middleware/test_middleware.py b/tests/middleware/test_middleware.py new file mode 100644 index 0000000..e28ceca --- /dev/null +++ b/tests/middleware/test_middleware.py @@ -0,0 +1,2 @@ +def test_service_middleware(): + ... From 066cbd48f525272b9025cecde3b9f5457be21a1b Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 8 Sep 2023 15:10:44 +0300 Subject: [PATCH 02/12] Added mockserver (not working) --- tests/middleware/test_middleware.py | 22 +- tests/middleware/view.py | 26 +++ tests/mockserver.py | 317 ++++++++++++++++++++++++++++ tests/spiders.py | 44 ++++ 4 files changed, 407 insertions(+), 2 deletions(-) create mode 100644 tests/middleware/view.py create mode 100644 tests/mockserver.py create mode 100644 tests/spiders.py diff --git a/tests/middleware/test_middleware.py b/tests/middleware/test_middleware.py index e28ceca..c12712a 100644 --- a/tests/middleware/test_middleware.py +++ b/tests/middleware/test_middleware.py @@ -1,2 +1,20 @@ -def test_service_middleware(): - ... +from tests.spiders import FollowAllSpider +from tests.mockserver import MockServer +from twisted.trial.unittest import TestCase +from twisted.internet import defer +from scrapy.utils.test import get_crawler + + +class CrawlTestCase(TestCase): + def setUp(self): + self.mockserver = MockServer() + self.mockserver.__enter__() + + def tearDown(self): + self.mockserver.__exit__(None, None, None) + + @defer.inlineCallbacks + def test_follow_all(self): + crawler = get_crawler(FollowAllSpider) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 11) # 10 + start_url diff --git a/tests/middleware/view.py b/tests/middleware/view.py new file mode 100644 index 0000000..f8a6069 --- /dev/null +++ b/tests/middleware/view.py @@ -0,0 +1,26 @@ +from scrapy import Request + + +import scrapy + + +class ViewSpider(scrapy.Spider): + name = "view" + + start_urls = ["https://www.google.com/recaptcha/api2/demo"] + + custom_settings = {} + + def start_requests(self): + for url in self.start_urls: + yield Request(url, callback=self.parse, errback=self.errback) + + def parse(self, response, **kwargs): + self.log("WE ARE PARSING RESPONSE!") + self.log(response) + self.log(response.body) + self.log("WE HAVE PARSED RESPONSE!") + + def errback(self, failure): + self.log("We are in error processing!") + self.log(failure) diff --git a/tests/mockserver.py b/tests/mockserver.py new file mode 100644 index 0000000..ef7fb39 --- /dev/null +++ b/tests/mockserver.py @@ -0,0 +1,317 @@ +import argparse +import json +import os +import random +import sys +from pathlib import Path +from subprocess import PIPE, Popen +from typing import Dict +from urllib.parse import urlencode + +from OpenSSL import SSL +from twisted.internet import defer, reactor, ssl +from twisted.internet.protocol import ServerFactory +from twisted.internet.task import deferLater +from twisted.names import dns, error +from twisted.names.server import DNSServerFactory +from twisted.web import resource +from twisted.web.server import NOT_DONE_YET, GzipEncoderFactory, Site +from twisted.web.static import File +from twisted.web.util import redirectTo + +from scrapy.utils.python import to_bytes, to_unicode + + +def getarg(request, name, default=None, type=None): + if name in request.args: + value = request.args[name][0] + if type is not None: + value = type(value) + return value + return default + + +def get_mockserver_env() -> Dict[str, str]: + """Return a OS environment dict suitable to run mockserver processes.""" + + tests_path = Path(__file__).parent.parent + pythonpath = str(tests_path) + os.pathsep + os.environ.get("PYTHONPATH", "") + env = os.environ.copy() + env["PYTHONPATH"] = pythonpath + return env + + +class PayloadResource(resource.Resource): + """ + A testing resource which renders itself as the contents of the request body + as long as the request body is 100 bytes long, otherwise which renders + itself as C{"ERROR"}. + """ + + def render(self, request): + data = request.content.read() + contentLength = request.requestHeaders.getRawHeaders(b"content-length")[0] + if len(data) != 100 or int(contentLength) != 100: + return b"ERROR" + return data + + +class LeafResource(resource.Resource): + isLeaf = True + + def deferRequest(self, request, delay, f, *a, **kw): + def _cancelrequest(_): + # silence CancelledError + d.addErrback(lambda _: None) + d.cancel() + + d = deferLater(reactor, delay, f, *a, **kw) + request.notifyFinish().addErrback(_cancelrequest) + return d + + +class Follow(LeafResource): + def render(self, request): + total = getarg(request, b"total", 100, type=int) + show = getarg(request, b"show", 1, type=int) + order = getarg(request, b"order", b"desc") + maxlatency = getarg(request, b"maxlatency", 0, type=float) + n = getarg(request, b"n", total, type=int) + if order == b"rand": + nlist = [random.randint(1, total) for _ in range(show)] + else: # order == "desc" + nlist = range(n, max(n - show, 0), -1) + + lag = random.random() * maxlatency + self.deferRequest(request, lag, self.renderRequest, request, nlist) + return NOT_DONE_YET + + def renderRequest(self, request, nlist): + s = """ """ + args = request.args.copy() + for nl in nlist: + args[b"n"] = [to_bytes(str(nl))] + argstr = urlencode(args, doseq=True) + s += f"follow {nl}
" + s += """""" + request.write(to_bytes(s)) + request.finish() + + +class Delay(LeafResource): + def render_GET(self, request): + n = getarg(request, b"n", 1, type=float) + b = getarg(request, b"b", 1, type=int) + if b: + # send headers now and delay body + request.write("") + self.deferRequest(request, n, self._delayedRender, request, n) + return NOT_DONE_YET + + def _delayedRender(self, request, n): + request.write(to_bytes(f"Response delayed for {n:.3f} seconds\n")) + request.finish() + + +class Status(LeafResource): + def render_GET(self, request): + n = getarg(request, b"n", 200, type=int) + request.setResponseCode(n) + return b"" + + +class Raw(LeafResource): + def render_GET(self, request): + request.startedWriting = 1 + self.deferRequest(request, 0, self._delayedRender, request) + return NOT_DONE_YET + + render_POST = render_GET + + def _delayedRender(self, request): + raw = getarg(request, b"raw", b"HTTP 1.1 200 OK\n") + request.startedWriting = 1 + request.write(raw) + request.channel.transport.loseConnection() + request.finish() + + +class Echo(LeafResource): + def render_GET(self, request): + output = { + "headers": dict( + (to_unicode(k), [to_unicode(v) for v in vs]) + for k, vs in request.requestHeaders.getAllRawHeaders() + ), + "body": to_unicode(request.content.read()), + } + return to_bytes(json.dumps(output)) + + render_POST = render_GET + + +class RedirectTo(LeafResource): + def render(self, request): + goto = getarg(request, b"goto", b"/") + # we force the body content, otherwise Twisted redirectTo() + # returns HTML with Date: Fri, 15 Sep 2023 08:02:19 +0300 Subject: [PATCH 03/12] Only http --- tests/mockserver.py | 67 +++++---------------------------------------- 1 file changed, 7 insertions(+), 60 deletions(-) diff --git a/tests/mockserver.py b/tests/mockserver.py index ef7fb39..96626ee 100644 --- a/tests/mockserver.py +++ b/tests/mockserver.py @@ -50,8 +50,8 @@ class PayloadResource(resource.Resource): def render(self, request): data = request.content.read() - contentLength = request.requestHeaders.getRawHeaders(b"content-length")[0] - if len(data) != 100 or int(contentLength) != 100: + content_length = request.requestHeaders.getRawHeaders(b"content-length")[0] + if len(data) != 100 or int(content_length) != 100: return b"ERROR" return data @@ -228,10 +228,8 @@ def __enter__(self): env=get_mockserver_env(), ) http_address = self.proc.stdout.readline().strip().decode("ascii") - https_address = self.proc.stdout.readline().strip().decode("ascii") self.http_address = http_address - self.https_address = https_address return self @@ -245,73 +243,22 @@ def url(self, path, is_secure=False): return host + path -class MockDNSResolver: - """ - Implements twisted.internet.interfaces.IResolver partially - """ - - def _resolve(self, name): - record = dns.Record_A(address=b"127.0.0.1") - answer = dns.RRHeader(name=name, payload=record) - return [answer], [], [] - - def query(self, query, timeout=None): - if query.type == dns.A: - return defer.succeed(self._resolve(query.name.name)) - return defer.fail(error.DomainError()) - - def lookupAllRecords(self, name, timeout=None): - return defer.succeed(self._resolve(name)) - - -def ssl_context_factory( - keyfile="keys/localhost.key", certfile="keys/localhost.crt", cipher_string=None -): - factory = ssl.DefaultOpenSSLContextFactory( - str(Path(__file__).parent / keyfile), - str(Path(__file__).parent / certfile), - ) - if cipher_string: - ctx = factory.getContext() - # disabling TLS1.3 because it unconditionally enables some strong ciphers - ctx.set_options(SSL.OP_CIPHER_SERVER_PREFERENCE | SSL.OP_NO_TLSv1_3) - ctx.set_cipher_list(to_bytes(cipher_string)) - return factory - - if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( - "-t", "--type", type=str, choices=("http", "dns"), default="http" + "-t", "--type", type=str, choices=("http",), default="http" ) args = parser.parse_args() - factory: ServerFactory - if args.type == "http": root = Root() - factory = Site(root) + factory: ServerFactory = Site(root) httpPort = reactor.listenTCP(0, factory) - contextFactory = ssl_context_factory() - # httpsPort = reactor.listenSSL(0, factory, contextFactory) - - def print_listening(): - httpHost = httpPort.getHost() - # httpsHost = httpsPort.getHost() - httpAddress = f"http://{httpHost.host}:{httpHost.port}" - # httpsAddress = f"https://{httpsHost.host}:{httpsHost.port}" - print(httpAddress) - # print(httpsAddress) - - elif args.type == "dns": - clients = [MockDNSResolver()] - factory = DNSServerFactory(clients=clients) - protocol = dns.DNSDatagramProtocol(controller=factory) - listener = reactor.listenUDP(0, protocol) def print_listening(): - host = listener.getHost() - print(f"{host.host}:{host.port}") + http_host = httpPort.getHost() + http_address = f"http://{http_host.host}:{http_host.port}" + print(http_address) reactor.callWhenRunning(print_listening) reactor.run() From 38a7befcecc9eb0dd624ae28889f786866a8b0ef Mon Sep 17 00:00:00 2001 From: matthew Date: Thu, 21 Sep 2023 14:47:56 +0300 Subject: [PATCH 04/12] screenshot (not working) --- tests/middleware/test_middleware.py | 28 +++++++- tests/mockserver.py | 104 ++++++++++++++++++++++++---- tests/scrapy_logo.png | Bin 0 -> 150173 bytes tests/spiders.py | 84 +++++++++++++++++++++- 4 files changed, 200 insertions(+), 16 deletions(-) create mode 100644 tests/scrapy_logo.png diff --git a/tests/middleware/test_middleware.py b/tests/middleware/test_middleware.py index c12712a..a8468ce 100644 --- a/tests/middleware/test_middleware.py +++ b/tests/middleware/test_middleware.py @@ -1,4 +1,4 @@ -from tests.spiders import FollowAllSpider +from tests.spiders import FollowAllSpider, GoToSpider, ClickSpider, ScreenshotSpider from tests.mockserver import MockServer from twisted.trial.unittest import TestCase from twisted.internet import defer @@ -6,9 +6,17 @@ class CrawlTestCase(TestCase): + SETTINGS = { + 'DOWNLOADER_MIDDLEWARES': { + 'scrapypuppeteer.middleware.PuppeteerServiceDownloaderMiddleware': 1042 + }, + 'PUPPETEER_SERVICE_URL': None, + } + def setUp(self): self.mockserver = MockServer() self.mockserver.__enter__() + self.SETTINGS['PUPPETEER_SERVICE_URL'] = self.mockserver.http_address def tearDown(self): self.mockserver.__exit__(None, None, None) @@ -18,3 +26,21 @@ def test_follow_all(self): crawler = get_crawler(FollowAllSpider) yield crawler.crawl(mockserver=self.mockserver) self.assertEqual(len(crawler.spider.urls_visited), 11) # 10 + start_url + + @defer.inlineCallbacks + def test_goto(self): + crawler = get_crawler(GoToSpider, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 1) + + @defer.inlineCallbacks + def test_click(self): + crawler = get_crawler(ClickSpider, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 1) + + @defer.inlineCallbacks + def test_screenshot(self): + crawler = get_crawler(ScreenshotSpider, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 1) diff --git a/tests/mockserver.py b/tests/mockserver.py index 96626ee..90e5878 100644 --- a/tests/mockserver.py +++ b/tests/mockserver.py @@ -8,12 +8,9 @@ from typing import Dict from urllib.parse import urlencode -from OpenSSL import SSL -from twisted.internet import defer, reactor, ssl +from twisted.internet import reactor from twisted.internet.protocol import ServerFactory from twisted.internet.task import deferLater -from twisted.names import dns, error -from twisted.names.server import DNSServerFactory from twisted.web import resource from twisted.web.server import NOT_DONE_YET, GzipEncoderFactory, Site from twisted.web.static import File @@ -21,6 +18,8 @@ from scrapy.utils.python import to_bytes, to_unicode +from secrets import token_hex + def getarg(request, name, default=None, type=None): if name in request.args: @@ -70,6 +69,86 @@ def _cancelrequest(_): return d +class GoTo(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + request.setHeader(b"Content-Type", b"application/json") + html = ''' + + ''' + from json import dumps + response_data = { + 'contextId': token_hex(20), + 'pageId': token_hex(20), + 'html': html, + 'cookies': None + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + +class Click(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + request.setHeader(b"Content-Type", b"application/json") + html = ''' + clicked + ''' + from json import dumps + response_data = { + 'contextId': context_id, + 'pageId': page_id, + 'html': html, + 'cookies': None + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + +class CloseContext(LeafResource): + def render_POST(self, request): + self.deferRequest(request, 0, self._render_request, request) + return NOT_DONE_YET + + def _render_request(self, request): + request.finish() + + +class Screenshot(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + request.setHeader(b"Content-Type", b"application/json") + from base64 import b64encode + from json import dumps + with open("./tests/scrapy_logo.png", 'rb') as image: + response_data = { + 'screenshot': b64encode(image.read()), + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + class Follow(LeafResource): def render(self, request): total = getarg(request, b"total", 100, type=int) @@ -192,6 +271,10 @@ def render(self, request): class Root(resource.Resource): def __init__(self): resource.Resource.__init__(self) + self.putChild(b"goto", GoTo()) + self.putChild(b"click", Click()) + self.putChild(b"close_context", CloseContext()) + self.putChild(b"screenshot", Screenshot()) self.putChild(b"status", Status()) self.putChild(b"follow", Follow()) self.putChild(b"delay", Delay()) @@ -216,9 +299,6 @@ def __init__(self): def getChild(self, name, request): return self - def render(self, request): - return b"Scrapy mock HTTP server\n" - class MockServer: def __enter__(self): @@ -227,9 +307,7 @@ def __enter__(self): stdout=PIPE, env=get_mockserver_env(), ) - http_address = self.proc.stdout.readline().strip().decode("ascii") - - self.http_address = http_address + self.http_address = self.proc.stdout.readline().strip().decode("ascii") return self @@ -237,9 +315,8 @@ def __exit__(self, exc_type, exc_value, traceback): self.proc.kill() self.proc.communicate() - def url(self, path, is_secure=False): - host = self.https_address if is_secure else self.http_address - host = host.replace("0.0.0.0", "127.0.0.1") + def url(self, path): + host = self.http_address.replace("0.0.0.0", "127.0.0.1") return host + path @@ -255,6 +332,7 @@ def url(self, path, is_secure=False): factory: ServerFactory = Site(root) httpPort = reactor.listenTCP(0, factory) + def print_listening(): http_host = httpPort.getHost() http_address = f"http://{http_host.host}:{http_host.port}" diff --git a/tests/scrapy_logo.png b/tests/scrapy_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5446ff7d1c614e30e152d03e8e3620231502d968 GIT binary patch literal 150173 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 literal 0 HcmV?d00001 diff --git a/tests/spiders.py b/tests/spiders.py index ad812c7..373c785 100644 --- a/tests/spiders.py +++ b/tests/spiders.py @@ -1,6 +1,9 @@ +from typing import Iterable from urllib.parse import urlencode from scrapy import Spider, Request from scrapy.linkextractors import LinkExtractor +from scrapypuppeteer import PuppeteerRequest +from scrapypuppeteer.actions import GoTo, Click, Screenshot import time @@ -27,14 +30,13 @@ class FollowAllSpider(MetaSpider): link_extractor = LinkExtractor() def __init__( - self, total=10, show=20, order="rand", maxlatency=0.0, *args, **kwargs + self, total=10, show=20, order="rand", maxlatency=0.0, *args, **kwargs ): super().__init__(*args, **kwargs) self.urls_visited = [] self.times = [] qargs = {"total": total, "show": show, "order": order, "maxlatency": maxlatency} url = self.mockserver.url(f"/follow?{urlencode(qargs, doseq=True)}") - print(f"READY URL: {url}") self.start_urls = [url] def parse(self, response, **kwargs): @@ -42,3 +44,81 @@ def parse(self, response, **kwargs): self.times.append(time.time()) for link in self.link_extractor.extract_links(response): yield Request(link.url, callback=self.parse) + + +class GoToSpider(MetaSpider): + name = "goto" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.urls_visited = [] + + def start_requests(self) -> Iterable[Request]: + yield PuppeteerRequest(GoTo("https://some_url.com"), + callback=self.parse, errback=self.errback, + close_page=False) + + def parse(self, response, **kwargs): + body = b''' + + ''' + if response.body == body: + self.urls_visited.append(response.url) + + def errback(self, failure): + print(failure) + + +class ClickSpider(MetaSpider): + name = "click" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.urls_visited = [] + + def start_requests(self) -> Iterable[Request]: + yield PuppeteerRequest(GoTo("https://some_url.com"), + callback=self.click, errback=self.errback, + close_page=False) + + def click(self, response, **kwargs): + yield response.follow(Click("the_selector"), + callback=self.parse, errback=self.errback, + close_page=False) + + def parse(self, response, **kwargs): + body = b''' + clicked + ''' + if response.body == body: + self.urls_visited.append(response.url) + + def errback(self, failure): + print(failure) + + +class ScreenshotSpider(MetaSpider): + name = "screenshot" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.urls_visited = [] + + def start_requests(self) -> Iterable[Request]: + yield PuppeteerRequest(GoTo("https://some_url.com"), + callback=self.screenshot, errback=self.errback, + close_page=False) + + def screenshot(self, response, **kwargs): + yield response.follow(Screenshot(), + callback=self.parse, errback=self.errback, + close_page=False) + + def parse(self, response, **kwargs): + from base64 import b64encode + with open("./tests/scrapy_logo.png", 'rb') as image: + if b64encode(image.read()) == response.screenshot: + self.urls_visited.append(response.url) + + def errback(self, failure): + print(failure) From 1d1a3cdc4cd75982a0a0c748d4722117da5aaff2 Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 22 Sep 2023 10:18:39 +0300 Subject: [PATCH 05/12] Working screenshot --- tests/mockserver.py | 2 +- tests/spiders.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/mockserver.py b/tests/mockserver.py index 90e5878..186b134 100644 --- a/tests/mockserver.py +++ b/tests/mockserver.py @@ -143,7 +143,7 @@ def _render_request(self, request, page_id, context_id, close_page): from json import dumps with open("./tests/scrapy_logo.png", 'rb') as image: response_data = { - 'screenshot': b64encode(image.read()), + 'screenshot': b64encode(image.read()).decode(), } request.write(to_bytes(dumps(response_data))) request.finish() diff --git a/tests/spiders.py b/tests/spiders.py index 373c785..16863cc 100644 --- a/tests/spiders.py +++ b/tests/spiders.py @@ -117,7 +117,7 @@ def screenshot(self, response, **kwargs): def parse(self, response, **kwargs): from base64 import b64encode with open("./tests/scrapy_logo.png", 'rb') as image: - if b64encode(image.read()) == response.screenshot: + if b64encode(image.read()).decode() == response.screenshot: self.urls_visited.append(response.url) def errback(self, failure): From c6ae2d2106566a54044a8e7980f0da19208e3b4e Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 22 Sep 2023 11:46:09 +0300 Subject: [PATCH 06/12] Go back and forward testing --- tests/middleware/test_middleware.py | 22 ++++++--- tests/mockserver.py | 76 ++++++++++++++++++++++++++++- tests/spiders.py | 76 ++++++++++++++++++++++++++++- 3 files changed, 163 insertions(+), 11 deletions(-) diff --git a/tests/middleware/test_middleware.py b/tests/middleware/test_middleware.py index a8468ce..edf72ba 100644 --- a/tests/middleware/test_middleware.py +++ b/tests/middleware/test_middleware.py @@ -1,11 +1,11 @@ -from tests.spiders import FollowAllSpider, GoToSpider, ClickSpider, ScreenshotSpider +from tests.spiders import GoToSpider, ClickSpider, ScreenshotSpider, CustomJsActionSpider, GoBackForwardSpider from tests.mockserver import MockServer from twisted.trial.unittest import TestCase from twisted.internet import defer from scrapy.utils.test import get_crawler -class CrawlTestCase(TestCase): +class PuppeteerCrawlTest(TestCase): SETTINGS = { 'DOWNLOADER_MIDDLEWARES': { 'scrapypuppeteer.middleware.PuppeteerServiceDownloaderMiddleware': 1042 @@ -21,12 +21,6 @@ def setUp(self): def tearDown(self): self.mockserver.__exit__(None, None, None) - @defer.inlineCallbacks - def test_follow_all(self): - crawler = get_crawler(FollowAllSpider) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 11) # 10 + start_url - @defer.inlineCallbacks def test_goto(self): crawler = get_crawler(GoToSpider, self.SETTINGS) @@ -44,3 +38,15 @@ def test_screenshot(self): crawler = get_crawler(ScreenshotSpider, self.SETTINGS) yield crawler.crawl(mockserver=self.mockserver) self.assertEqual(len(crawler.spider.urls_visited), 1) + + @defer.inlineCallbacks + def test_custom_js_action(self): + crawler = get_crawler(CustomJsActionSpider, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 1) + + @defer.inlineCallbacks + def test_back_forward(self): + crawler = get_crawler(GoBackForwardSpider, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), 1) diff --git a/tests/mockserver.py b/tests/mockserver.py index 186b134..2034410 100644 --- a/tests/mockserver.py +++ b/tests/mockserver.py @@ -31,7 +31,7 @@ def getarg(request, name, default=None, type=None): def get_mockserver_env() -> Dict[str, str]: - """Return a OS environment dict suitable to run mockserver processes.""" + """Return an OS environment dict suitable to run mockserver processes.""" tests_path = Path(__file__).parent.parent pythonpath = str(tests_path) + os.pathsep + os.environ.get("PYTHONPATH", "") @@ -94,6 +94,56 @@ def _render_request(self, request, page_id, context_id, close_page): request.finish() +class GoForward(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + request.setHeader(b"Content-Type", b"application/json") + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + html = ''' + went forward + ''' + from json import dumps + response_data = { + 'contextId': context_id, + 'pageId': page_id, + 'html': html, + 'cookies': None + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + +class Back(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + request.setHeader(b"Content-Type", b"application/json") + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + html = ''' + went back + ''' + from json import dumps + response_data = { + 'contextId': context_id, + 'pageId': page_id, + 'html': html, + 'cookies': None + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + class Click(LeafResource): def render_POST(self, request): page_id = getarg(request, b"pageId", default=None, type=str) @@ -133,12 +183,12 @@ def render_POST(self, request): page_id = getarg(request, b"pageId", default=None, type=str) context_id = getarg(request, b"contextId", default=None, type=str) close_page = getarg(request, b"closePage", default=0, type=bool) + request.setHeader(b"Content-Type", b"application/json") self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) return NOT_DONE_YET def _render_request(self, request, page_id, context_id, close_page): - request.setHeader(b"Content-Type", b"application/json") from base64 import b64encode from json import dumps with open("./tests/scrapy_logo.png", 'rb') as image: @@ -149,6 +199,25 @@ def _render_request(self, request, page_id, context_id, close_page): request.finish() +class Action(LeafResource): + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET + + def _render_request(self, request, page_id, context_id, close_page): + request.setHeader(b"Content-Type", b"application/json") + from json import dumps + response_data = { + 'field': "Hello!", + } + request.write(to_bytes(dumps(response_data))) + request.finish() + + class Follow(LeafResource): def render(self, request): total = getarg(request, b"total", 100, type=int) @@ -272,9 +341,12 @@ class Root(resource.Resource): def __init__(self): resource.Resource.__init__(self) self.putChild(b"goto", GoTo()) + self.putChild(b"forward", GoForward()) + self.putChild(b"back", Back()) self.putChild(b"click", Click()) self.putChild(b"close_context", CloseContext()) self.putChild(b"screenshot", Screenshot()) + self.putChild(b"action", Action()) self.putChild(b"status", Status()) self.putChild(b"follow", Follow()) self.putChild(b"delay", Delay()) diff --git a/tests/spiders.py b/tests/spiders.py index 16863cc..a3a19f8 100644 --- a/tests/spiders.py +++ b/tests/spiders.py @@ -3,7 +3,7 @@ from scrapy import Spider, Request from scrapy.linkextractors import LinkExtractor from scrapypuppeteer import PuppeteerRequest -from scrapypuppeteer.actions import GoTo, Click, Screenshot +from scrapypuppeteer.actions import GoTo, Click, Screenshot, CustomJsAction, GoBack, GoForward import time @@ -122,3 +122,77 @@ def parse(self, response, **kwargs): def errback(self, failure): print(failure) + + +class CustomJsActionSpider(MetaSpider): + name = "custom_js_action" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.urls_visited = [] + + def start_requests(self) -> Iterable[Request]: + yield PuppeteerRequest(GoTo("https://some_url.com"), + callback=self.action, errback=self.errback, + close_page=False) + + def action(self, response, **kwargs): + js_function = ''' + some js function + ''' + yield response.follow(CustomJsAction(js_function), + callback=self.parse, errback=self.errback, + close_page=False) + + def parse(self, response, **kwargs): + response_data = { + 'field': "Hello!" + } + if response.data == response_data: + self.urls_visited.append(response.url) + + def errback(self, failure): + print(failure) + + +class GoBackForwardSpider(MetaSpider): + name = "go_back_forward" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.urls_visited = [] + + def start_requests(self) -> Iterable[Request]: + yield PuppeteerRequest(GoTo("https://some_url.com"), + callback=self.go_next, errback=self.errback, + close_page=False) + + def go_next(self, response, **kwargs): + yield response.follow(GoTo("/article"), + callback=self.go_back, errback=self.errback, + close_page=False) + + def go_back(self, response, **kwargs): + yield response.follow(GoBack(), + callback=self.go_forward, errback=self.errback, + close_page=False) + + def go_forward(self, response, **kwargs): + body = b''' + went back + ''' + + assert response.body == body + yield response.follow(GoForward(), + callback=self.parse, errback=self.errback, + close_page=False) + + def parse(self, response, **kwargs): + body = b''' + went forward + ''' + if response.body == body: + self.urls_visited.append(response.url) + + def errback(self, failure): + print(failure) From 78920f42e1f9ccef967388d92c4eb5fb7b1cb611 Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 22 Sep 2023 12:42:54 +0300 Subject: [PATCH 07/12] Refactoring --- tests/actions/constants.py | 6 +- tests/middleware/test_middleware.py | 39 ++--- tests/mockserver.py | 242 +++------------------------- tests/spiders.py | 47 ++---- 4 files changed, 56 insertions(+), 278 deletions(-) diff --git a/tests/actions/constants.py b/tests/actions/constants.py index c712ed5..c30cbcc 100644 --- a/tests/actions/constants.py +++ b/tests/actions/constants.py @@ -1,10 +1,10 @@ from random import randint from itertools import combinations -URLS = ("https://some_url.com", "https://invalid_url.ru", "https://one_more_url.net", "not_url/not_url") -WAIT_UNTIL = ("load", "domcontentloaded", "networkidle0", "networkidle2") +URLS = ("https://some_url.com", "not_url/not_url") +WAIT_UNTIL = ("load", "domcontentloaded", "networkidle0") WAIT_OPTS = [None] -SELECTORS = ("nothing", "tr.td::attr(something)", "#button", "") +SELECTORS = ("nothing", "tr.td::attr(something)") CLICK_OPTS = [None] diff --git a/tests/middleware/test_middleware.py b/tests/middleware/test_middleware.py index edf72ba..13767c9 100644 --- a/tests/middleware/test_middleware.py +++ b/tests/middleware/test_middleware.py @@ -1,4 +1,10 @@ -from tests.spiders import GoToSpider, ClickSpider, ScreenshotSpider, CustomJsActionSpider, GoBackForwardSpider +from tests.spiders import ( + GoToSpider, + GoBackForwardSpider, + ClickSpider, + ScreenshotSpider, + CustomJsActionSpider, +) from tests.mockserver import MockServer from twisted.trial.unittest import TestCase from twisted.internet import defer @@ -21,32 +27,27 @@ def setUp(self): def tearDown(self): self.mockserver.__exit__(None, None, None) + def _start_testing(self, spider_cls, expected): + crawler = get_crawler(spider_cls, self.SETTINGS) + yield crawler.crawl(mockserver=self.mockserver) + self.assertEqual(len(crawler.spider.urls_visited), expected) + @defer.inlineCallbacks def test_goto(self): - crawler = get_crawler(GoToSpider, self.SETTINGS) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 1) + yield from self._start_testing(GoToSpider, 1) + + @defer.inlineCallbacks + def test_back_forward(self): + yield from self._start_testing(GoBackForwardSpider, 1) @defer.inlineCallbacks def test_click(self): - crawler = get_crawler(ClickSpider, self.SETTINGS) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 1) + yield from self._start_testing(ClickSpider, 1) @defer.inlineCallbacks def test_screenshot(self): - crawler = get_crawler(ScreenshotSpider, self.SETTINGS) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 1) + yield from self._start_testing(ScreenshotSpider, 1) @defer.inlineCallbacks def test_custom_js_action(self): - crawler = get_crawler(CustomJsActionSpider, self.SETTINGS) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 1) - - @defer.inlineCallbacks - def test_back_forward(self): - crawler = get_crawler(GoBackForwardSpider, self.SETTINGS) - yield crawler.crawl(mockserver=self.mockserver) - self.assertEqual(len(crawler.spider.urls_visited), 1) + yield from self._start_testing(CustomJsActionSpider, 1) diff --git a/tests/mockserver.py b/tests/mockserver.py index 2034410..9d3bb60 100644 --- a/tests/mockserver.py +++ b/tests/mockserver.py @@ -1,24 +1,19 @@ import argparse -import json import os -import random import sys + from pathlib import Path from subprocess import PIPE, Popen from typing import Dict -from urllib.parse import urlencode +from secrets import token_hex from twisted.internet import reactor from twisted.internet.protocol import ServerFactory from twisted.internet.task import deferLater from twisted.web import resource -from twisted.web.server import NOT_DONE_YET, GzipEncoderFactory, Site -from twisted.web.static import File -from twisted.web.util import redirectTo +from twisted.web.server import NOT_DONE_YET, Site -from scrapy.utils.python import to_bytes, to_unicode - -from secrets import token_hex +from scrapy.utils.python import to_bytes def getarg(request, name, default=None, type=None): @@ -40,23 +35,18 @@ def get_mockserver_env() -> Dict[str, str]: return env -class PayloadResource(resource.Resource): - """ - A testing resource which renders itself as the contents of the request body - as long as the request body is 100 bytes long, otherwise which renders - itself as C{"ERROR"}. - """ +class LeafResource(resource.Resource): + isLeaf = True - def render(self, request): - data = request.content.read() - content_length = request.requestHeaders.getRawHeaders(b"content-length")[0] - if len(data) != 100 or int(content_length) != 100: - return b"ERROR" - return data + def render_POST(self, request): + page_id = getarg(request, b"pageId", default=None, type=str) + context_id = getarg(request, b"contextId", default=None, type=str) + close_page = getarg(request, b"closePage", default=0, type=bool) + request.setHeader(b"Content-Type", b"application/json") -class LeafResource(resource.Resource): - isLeaf = True + self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) + return NOT_DONE_YET def deferRequest(self, request, delay, f, *a, **kw): def _cancelrequest(_): @@ -68,18 +58,12 @@ def _cancelrequest(_): request.notifyFinish().addErrback(_cancelrequest) return d + def _render_request(self, request, page_id, context_id, close_page): + raise NotImplementedError -class GoTo(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET +class GoTo(LeafResource): def _render_request(self, request, page_id, context_id, close_page): - request.setHeader(b"Content-Type", b"application/json") html = ''' ''' @@ -95,15 +79,6 @@ def _render_request(self, request, page_id, context_id, close_page): class GoForward(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - request.setHeader(b"Content-Type", b"application/json") - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET - def _render_request(self, request, page_id, context_id, close_page): html = ''' went forward @@ -120,15 +95,6 @@ def _render_request(self, request, page_id, context_id, close_page): class Back(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - request.setHeader(b"Content-Type", b"application/json") - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET - def _render_request(self, request, page_id, context_id, close_page): html = ''' went back @@ -145,16 +111,7 @@ def _render_request(self, request, page_id, context_id, close_page): class Click(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET - def _render_request(self, request, page_id, context_id, close_page): - request.setHeader(b"Content-Type", b"application/json") html = ''' clicked ''' @@ -169,25 +126,7 @@ def _render_request(self, request, page_id, context_id, close_page): request.finish() -class CloseContext(LeafResource): - def render_POST(self, request): - self.deferRequest(request, 0, self._render_request, request) - return NOT_DONE_YET - - def _render_request(self, request): - request.finish() - - class Screenshot(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - request.setHeader(b"Content-Type", b"application/json") - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET - def _render_request(self, request, page_id, context_id, close_page): from base64 import b64encode from json import dumps @@ -200,16 +139,7 @@ def _render_request(self, request, page_id, context_id, close_page): class Action(LeafResource): - def render_POST(self, request): - page_id = getarg(request, b"pageId", default=None, type=str) - context_id = getarg(request, b"contextId", default=None, type=str) - close_page = getarg(request, b"closePage", default=0, type=bool) - - self.deferRequest(request, 0, self._render_request, request, page_id, context_id, close_page) - return NOT_DONE_YET - def _render_request(self, request, page_id, context_id, close_page): - request.setHeader(b"Content-Type", b"application/json") from json import dumps response_data = { 'field': "Hello!", @@ -218,125 +148,11 @@ def _render_request(self, request, page_id, context_id, close_page): request.finish() -class Follow(LeafResource): - def render(self, request): - total = getarg(request, b"total", 100, type=int) - show = getarg(request, b"show", 1, type=int) - order = getarg(request, b"order", b"desc") - maxlatency = getarg(request, b"maxlatency", 0, type=float) - n = getarg(request, b"n", total, type=int) - if order == b"rand": - nlist = [random.randint(1, total) for _ in range(show)] - else: # order == "desc" - nlist = range(n, max(n - show, 0), -1) - - lag = random.random() * maxlatency - self.deferRequest(request, lag, self.renderRequest, request, nlist) - return NOT_DONE_YET - - def renderRequest(self, request, nlist): - s = """ """ - args = request.args.copy() - for nl in nlist: - args[b"n"] = [to_bytes(str(nl))] - argstr = urlencode(args, doseq=True) - s += f"follow {nl}
" - s += """""" - request.write(to_bytes(s)) - request.finish() - - -class Delay(LeafResource): - def render_GET(self, request): - n = getarg(request, b"n", 1, type=float) - b = getarg(request, b"b", 1, type=int) - if b: - # send headers now and delay body - request.write("") - self.deferRequest(request, n, self._delayedRender, request, n) - return NOT_DONE_YET - - def _delayedRender(self, request, n): - request.write(to_bytes(f"Response delayed for {n:.3f} seconds\n")) - request.finish() - - -class Status(LeafResource): - def render_GET(self, request): - n = getarg(request, b"n", 200, type=int) - request.setResponseCode(n) - return b"" - - -class Raw(LeafResource): - def render_GET(self, request): - request.startedWriting = 1 - self.deferRequest(request, 0, self._delayedRender, request) - return NOT_DONE_YET - - render_POST = render_GET - - def _delayedRender(self, request): - raw = getarg(request, b"raw", b"HTTP 1.1 200 OK\n") - request.startedWriting = 1 - request.write(raw) - request.channel.transport.loseConnection() - request.finish() - - -class Echo(LeafResource): - def render_GET(self, request): - output = { - "headers": dict( - (to_unicode(k), [to_unicode(v) for v in vs]) - for k, vs in request.requestHeaders.getAllRawHeaders() - ), - "body": to_unicode(request.content.read()), - } - return to_bytes(json.dumps(output)) - - render_POST = render_GET - - -class RedirectTo(LeafResource): - def render(self, request): - goto = getarg(request, b"goto", b"/") - # we force the body content, otherwise Twisted redirectTo() - # returns HTML with Iterable[Request]: + def start_requests(self): yield PuppeteerRequest(GoTo("https://some_url.com"), callback=self.parse, errback=self.errback, close_page=False) @@ -76,7 +57,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.urls_visited = [] - def start_requests(self) -> Iterable[Request]: + def start_requests(self): yield PuppeteerRequest(GoTo("https://some_url.com"), callback=self.click, errback=self.errback, close_page=False) @@ -104,7 +85,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.urls_visited = [] - def start_requests(self) -> Iterable[Request]: + def start_requests(self): yield PuppeteerRequest(GoTo("https://some_url.com"), callback=self.screenshot, errback=self.errback, close_page=False) @@ -131,7 +112,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.urls_visited = [] - def start_requests(self) -> Iterable[Request]: + def start_requests(self): yield PuppeteerRequest(GoTo("https://some_url.com"), callback=self.action, errback=self.errback, close_page=False) @@ -162,7 +143,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.urls_visited = [] - def start_requests(self) -> Iterable[Request]: + def start_requests(self): yield PuppeteerRequest(GoTo("https://some_url.com"), callback=self.go_next, errback=self.errback, close_page=False) From 0c470f4777b8d0a2bf5cad651dfe70500e3606bb Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 15 Sep 2023 14:20:07 +0300 Subject: [PATCH 08/12] Working mockserver! --- scrapypuppeteer/middleware.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scrapypuppeteer/middleware.py b/scrapypuppeteer/middleware.py index f6c5852..34ab0f7 100644 --- a/scrapypuppeteer/middleware.py +++ b/scrapypuppeteer/middleware.py @@ -97,6 +97,7 @@ def process_request(self, request, spider): **meta } + print(service_url) return ActionRequest( url=service_url, action=action, @@ -142,19 +143,25 @@ def _serialize_body(self, action, request): return str(payload) def process_response(self, request, response, spider): + print("WE GOT INTO process_response") if not isinstance(response, TextResponse): return response + print("WE ARE GETTING puppeteer_request") puppeteer_request = request.meta.get('puppeteer_request') if puppeteer_request is None: return response + print("WE GOT puppeteer_request") if b'application/json' not in response.headers.get(b'Content-Type', b''): + print("WE DO NOT HAVE CORRECT HEADER") return response.replace(request=request) + print("WE ARE GETTING response_data") response_data = json.loads(response.text) response_cls = self._get_response_class(puppeteer_request.action) + print("WE GOT response_data") if response.status != 200: self.used_contexts[id(spider)].add(response_data['contextId']) return response From 4feb118f27ceab0a560715850a45e5fcb6d14460 Mon Sep 17 00:00:00 2001 From: matthew Date: Fri, 15 Sep 2023 17:08:25 +0300 Subject: [PATCH 09/12] Problem with click action... --- scrapypuppeteer/middleware.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scrapypuppeteer/middleware.py b/scrapypuppeteer/middleware.py index 34ab0f7..f6c5852 100644 --- a/scrapypuppeteer/middleware.py +++ b/scrapypuppeteer/middleware.py @@ -97,7 +97,6 @@ def process_request(self, request, spider): **meta } - print(service_url) return ActionRequest( url=service_url, action=action, @@ -143,25 +142,19 @@ def _serialize_body(self, action, request): return str(payload) def process_response(self, request, response, spider): - print("WE GOT INTO process_response") if not isinstance(response, TextResponse): return response - print("WE ARE GETTING puppeteer_request") puppeteer_request = request.meta.get('puppeteer_request') if puppeteer_request is None: return response - print("WE GOT puppeteer_request") if b'application/json' not in response.headers.get(b'Content-Type', b''): - print("WE DO NOT HAVE CORRECT HEADER") return response.replace(request=request) - print("WE ARE GETTING response_data") response_data = json.loads(response.text) response_cls = self._get_response_class(puppeteer_request.action) - print("WE GOT response_data") if response.status != 200: self.used_contexts[id(spider)].add(response_data['contextId']) return response From d2e7e81abffa13437bdc3564df6040a44565a4f4 Mon Sep 17 00:00:00 2001 From: matthew Date: Thu, 5 Oct 2023 14:48:55 +0300 Subject: [PATCH 10/12] Added testing in GitHub Actions --- .github/workflows/python-test.yml | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/python-test.yml diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml new file mode 100644 index 0000000..14331cd --- /dev/null +++ b/.github/workflows/python-test.yml @@ -0,0 +1,32 @@ +name: Test Scrapy-Puppeteer Library + +on: [push, pull_request] + +jobs: + tests: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - python-version: "3.7.x" # Min Python version (No 3.6 version) + - python-version: "3.8.x" + - python-version: "3.9.x" + - python-version: "3.10.x" + - python-version: "3.x" # Last Python version + steps: + - uses: actions/checkout@v3 + + - name: Set Python version ${{ matrix.python-version }} Up + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install pytest + pip install -r requirements.txt + + - name: Run Tests + run: | + python -m pytest From 4caa5647aa9e98089aa14c3fa05d9d4d831f66e2 Mon Sep 17 00:00:00 2001 From: matthew Date: Thu, 5 Oct 2023 14:54:26 +0300 Subject: [PATCH 11/12] Deleted pytest.ini --- pytest.ini | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 pytest.ini diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index f2dbc34..0000000 --- a/pytest.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pytest] - -pythonpath = /home/matthew/PycharmProjects/scrapy-puppeteer From e520244b79e43c1377fcd2633e3c43c58d218876 Mon Sep 17 00:00:00 2001 From: matthew Date: Thu, 5 Oct 2023 15:04:02 +0300 Subject: [PATCH 12/12] Pytest.ini example for developers --- pytest.ini.example | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 pytest.ini.example diff --git a/pytest.ini.example b/pytest.ini.example new file mode 100644 index 0000000..d87a089 --- /dev/null +++ b/pytest.ini.example @@ -0,0 +1,6 @@ +Maybe you want to test new features or minor changes on your local PC. +In this case you need to provide `pytest.ini` file in the root of the project: + +[pytest] + +pythonpath =