gpt4 book ai didi

javascript - 执行 javascript 代码以接受条款并打开下一页

转载 作者:行者123 更新时间:2023-11-29 21:48:45 25 4
gpt4 key购买 nike

我想抓取一个需要单击“接受条款”按钮才能进入的 javacode 呈现的网站。我正在使用 Scrapy 和 Splash,并尝试使用启动端点“render.html”和“execute”来执行 javascript 代码。在这两种情况下,输出都是起始页。为什么按预期发送这项工作?

url = 带有“接受条款”按钮的起始页。

url/index.aspx = 我要呈现的页面。

使用 render.html:

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' 是呈现的页面。

如果我按照 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”。

最佳答案

我遇到了同样的问题。我建议使用此解决方法:

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

参见 https://github.com/scrapinghub/splash/issues/200#issuecomment-112552839以获得更详细的解释。

关于javascript - 执行 javascript 代码以接受条款并打开下一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30178441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com