执行javascript代码以接受条款并打开下一页
我想抓取一个javacode呈现的网站,它需要点击“接受条款”按钮才能进入。我正在使用Scrapy和Splash,并尝试使用Splash端点“render.html”和“execute”来执行javascript代码。在这两种情况下,输出都是起始页。为什么要按预期完成这项工作 url=带有“接受条款”按钮的起始页 url/index.aspx=我要呈现的页面 使用render.html:执行javascript代码以接受条款并打开下一页,javascript,jquery,lua,scrapy,splash-screen,Javascript,Jquery,Lua,Scrapy,Splash Screen,我想抓取一个javacode呈现的网站,它需要点击“接受条款”按钮才能进入。我正在使用Scrapy和Splash,并尝试使用Splash端点“render.html”和“execute”来执行javascript代码。在这两种情况下,输出都是起始页。为什么要按预期完成这项工作 url=带有“接受条款”按钮的起始页 url/index.aspx=我要呈现的页面 使用render.html: yield scrapy.Request('url', self.parse, meta={ 'splash
yield scrapy.Request('url', self.parse, meta={ 'splash':
{ 'endpoint':'render.html','args': {'js_source':
'document.getElementById("AcceptTerms").click();', 'html': 1, 'wait':
0.5}}})
或者使用execute和lua:
lua_source_string = 'function main(splash)
splash:go("url/index.aspx")
splash:wait(0.5)
splash:runjs("document.getElementById(\'AcceptTerms\').click();")
return splash:html() end'
yield scrapy.Request('url', self.parse, meta={ 'splash': { 'endpoint':'execute','args': {'lua_source' : lua_source_string}}})
“url”是呈现的页面
如果我遵循中的示例并将以下lua字符串与jquery一起使用,如下所示:
lua_source_string = 'function main(splash)
splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js")
splash:go("url/index.aspx")
splash:wait(0.5)
splash:runjs("$(\'#AcceptTerms\').click();")
return splash:html() end'
或者像这样使用jquery代码:
lua_source_string = 'function main(splash)
splash:autoload("i/am/restricted/to/only/two/links/see/above/jquery.min.js")
splash:go("url/index.aspx")
splash:wait(0.5)
splash:runjs("$(\'#AcceptTerms\').trigger(\'click\');")
return splash:html() end'
我得到了同样的结果。呈现的页面为“url”。使用建议的方法将lua脚本发送到执行端点
主功能(飞溅)
splash:go(splash.args.url)
splash:runjs('document.getElementById[“…splash.args.submit…”)。单击();')
飞溅:等待(0.5)
返回splash:html()
结束
我也有同样的问题。我建议使用以下解决方法:
function setup_casperjs(splash)
-- preload CasperJS client utils.
-- __utils__ object is compatible with CasperJS
splash:autoload("https://raw.githubusercontent.com/n1k0/casperjs/master/modules/clientutils.js")
splash:autoload([[
window.__utils__ = new ClientUtils({});
]])
end
function main(splash)
setup_casperjs(splash)
assert(splash:go(splash.args.url))
assert(splash:runjs("__utils__.click('#AcceptTerms')"))
splash:wait(0.5)
return splash:html()
end
请参阅以获得更详细的解释。我认为这取决于页面,也许您应该共享它。URL为:
http://foreclosuresearch.arapahoegov.com/foreclosure
和http://foreclosuresearch.arapahoegov.com/foreclosure/index.aspx
@dave为什么它取决于页面?我没有这样评论,我只编辑了代码格式的问题。对不起,我对lua一无所知。@eLRuLL为什么这取决于页面?谢谢!为我工作。