我想抓取一个需要单击“接受条款”按钮才能进入的 javacode 呈现的网站。我正在使用 Scrapy 和 Splash,并尝试使用启动端点“render.html”和“执行”来执行 javascript 代码。在这两种情况下,输出都是起始页。为什么按预期进行这项工作?
url = 带有“接受条款”按钮的起始页。
url/index.aspx = 我要呈现的页面。
使用渲染.html:
yield scrapy.Request('url', self.parse, meta={ 'splash':
{ 'endpoint':'render.html','args': {'js_source':
'document.getElementById("AcceptTerms").click();', 'html': 1, 'wait':
0.5}}})
或者通过使用执行和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' 是呈现的页面。
如果我按照http://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash/中的示例并将以下 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”。