Web scraping 登录在SplashAPI中工作,但在使用SplashRequest时不工作

Web scraping 登录在SplashAPI中工作,但在使用SplashRequest时不工作,web-scraping,scrapy,scrapy-splash,Web Scraping,Scrapy,Scrapy Splash,相对较新的飞溅。我正在尝试刮一个需要登录的网站。我从SplashAPI开始,我可以完美地登录它。然而,当我使用SplashRequest将代码放入一个scrapy spider脚本中时,它无法登录 import scrapy from scrapy_splash import SplashRequest class Payer1Spider(scrapy.Spider): name = "payer1" start_url = "https://provider.w

相对较新的飞溅。我正在尝试刮一个需要登录的网站。我从SplashAPI开始,我可以完美地登录它。然而,当我使用SplashRequest将代码放入一个scrapy spider脚本中时,它无法登录

import scrapy  
from scrapy_splash import SplashRequest

class Payer1Spider(scrapy.Spider):  
    name = "payer1"  
    start_url = "https://provider.wellcare.com/provider/claims/search"  
    lua_script = """  
    function main(splash,args)  
        assert(splash:go(args.url))  
        splash:wait(0.5)  

    local search_input = splash:select('#Username')  
    search_input:send_text('')  

    local search_input = splash:select('#Password')
    search_input:send_text('')

    assert(splash:wait(0.5))
    local login_button = splash:select('#btnSubmit')
    login_button:mouse_click()

    assert(splash:wait(7))
    return{splash:html()}
end
"""

def start_requests(self):
    yield SplashRequest(self.start_url, self.parse_result,args={'lua_source': self.lua_script},)

def parse_result(self, response):
    yield {'doc_title' : response.text}
输出的HTML是登录页面,而不是登录后的页面。

您必须将endpoint='execute'添加到SplashRequest以执行lua脚本:

yield SplashRequest(self.start_url, self.parse_result, args={'lua_source': self.lua_script}, endpoint='execute')

我相信你确实不需要splash来登录这个网站。您可以尝试下一步:

得到https://provider.wellcare.com 然后

# Get request verification token..
token = response.css('input[name=__RequestVerificationToken]::attr(value)').get()

# Forge post request payload...
data = [
  ('__RequestVerificationToken', token),
  ('Username', 'user'),
  ('Password', 'pass'),
  ('ReturnUrl', '/provider/claims/search'),
]

#Make dict from list of tuples
formdata=dict(data)

# And then execute request
scrapy.FormRequest(
   url='https://provider.wellcare.com/api/sitecore/Login', 
   formdata=formdata
)

不完全确定这一切是否都能奏效。但是你可以试试。

我可以使用FormRequest来完成,我只是想知道SplashRequest是否出了问题,因为它在API中工作正常。