Прежде всего не путайте с 0.0.0.0:8085 (там правильно работает spla sh). Но моя проблема в том, что я разработал приложение PHP на локальном хосте, чтобы проверить утилизацию с помощью scrapy. К сожалению, это не работает.
Для справки мой код
КОД ПАУКА
import scrapy
from scrapy_splash import SplashRequest
from scrapy_splash import SplashFormRequest
from scrapy.http import Request, FormRequest
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
# from scrapy.selector import HtmlXPathSelector
from scrapy.http import FormRequest
import scrapy
from scrapy.crawler import CrawlerProcess
from scrapy.utils.response import open_in_browser
class MySpider(scrapy.Spider):
name = 'loster'
# start_urls = ["http://talkerscode.com/webtricks/demo/demo_ajax-login-form-using-jquery-php-and-mysql.php",]
start_urls =["http://localhost/sample_proj/login_form.php"]
lua_script = """
function main(splash, args)
-- find a form and submit "splash" to it
local function search_for_splash()
local forms = splash:select('form')
local inputs = forms.node:querySelectorAll('input:not([type="hidden"])')
local search_input = splash:select('#email')
search_input:send_text('arjunphp@gmail.com')
local search_input2 = splash:select('#password')
search_input2:send_text('12345')
local login_button = splash:select('#login')
login_button:mouse_click()
end
-- main rendering script
assert(splash:go(args.url))
assert(splash:wait(1))
search_for_splash()
assert(splash:wait(3))
return splash:html()
end
"""
def parse(self, response):
print("Inside parse")
# token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()
yield SplashRequest(
# 'http://talkerscode.com/webtricks/demo/demo_ajax-login-form-using-jquery-php-and-mysql.php',
'http://localhost/sample_proj/login_form.php',
callback=self.portal_page,
method='POST',
endpoint='execute',
args={
'wait': 0.5,
'lua_source': self.lua_script,
'formdata': {
'email': 'arjunphp@gmail.com',
'password': '12345'
# 'csrf_token':token
},
}
)
def portal_page(self, response):
print('Inside the portal_page')
print('7'*120)
print(response.body.decode('utf8'))
# yield SplashRequest(
# url='http://quotes.toscrape.com',
# callback=self.data_download,
# args={
# 'wait': 0.5,
# 'lua_source': self.lua_script,
# 'formdata': {}
# })
def data_download(self, response):
print('Data Download')
print(response.body.text)
НАСТРОЙКИ
BOT_NAME = 'scrashtest'
SPIDER_MODULES = ['scrashtest.spiders']
NEWSPIDER_MODULE = 'scrashtest.spiders'
DOWNLOADER_MIDDLEWARES = {
# Engine side
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
# Downloader side
}
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
SPLASH_URL = 'http://127.0.0.1:8050/'
# SPLASH_URL = 'http://192.168.59.103:8050/'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
Пожалуйста go через мой код, и если я что-то пропустил, пожалуйста, дайте мне знать. Моя цель - войти в любое приложение. Однако тот же код работает с онлайн-приложениями. Заранее спасибо за помощь