Как нажать 2 кнопки на одной странице, используя Scrapy + Splash? - PullRequest
1 голос
/ 09 апреля 2019

Есть страница, на которой после нажатия на ссылку появляется всплывающее уведомление. Таким образом, чтобы перейти по ссылке, скрипт lua должен нажать на кнопку 1, затем нажать на кнопку 2 (Принять всплывающее уведомление) и перейти на следующую страницу. Мой скрипт не нажимает на кнопку 2. Где я не прав?

class PalmBeachSpider(scrapy.Spider):

    name ='splash'
    custom_settings = {
        'SPLASH_URL' : 'http://localhost:8050',
        'DOWNLOADER_MIDDLEWARES' : {
                                    'scrapy_splash.SplashCookiesMiddleware': 723,
                                    'scrapy_splash.SplashMiddleware': 725,
                                    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
                                },
        'SPIDER_MIDDLEWARES' : {
                                'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
                                             }
    }






    script = '''
                function main(splash, args)
                assert(splash:go(args.url))
                assert(splash:wait(0.5))
                assert(splash:runjs('document.querySelector("#bodySection > div > div > div:nth-child(7) > div > div:nth-child(2) > a").click()'))
                assert(splash:wait(3.5))
                assert(splash:runjs('document.querySelector("a#idAcceptYes").click()'))
                return {
                html = splash:html(),


                  }
                end'''
    def start_requests(self):
        url  = 'https://apps.stjohnsclerk.com/Landmark'
        yield SplashRequest(url = url, callback = self.parse, endpoint = 'execute', args={'wait': 0.5, 'lua_source' : self.script})

    def parse(self, response):
        inspect_response(response, self)
        response = HtmlResponse(url=response.url, body=response.data['html'], encoding = 'utf-8')

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете просто добавить еще один 'assert (splash: wait (...))' после последнего splash: runjs.

...