python – ScrapyJS – 如何正确等待页面加载?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – ScrapyJS – 如何正确等待页面加载?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1933字,纯文字阅读大概需要3分钟。
内容图文
我正在使用ScrapyJS和Splash模拟表单提交按钮单击
def start_requests(self):
script = """
function main(splash)
assert(splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"))
assert(splash:go(splash.args.url))
local js = [[
var $j = jQuery.noConflict();
$j('#USER').val('frankcastle');
$j('#password').val('punisher');
$j('.button-oblong-orange.button-orange a').click();
]]
assert(splash:runjs(js))
local resumeJs = [[
function main(splash) {
var $j = jQuery.noConflict();
$j(document).ready(function(){
splash.resume();
})
}
]]
assert(splash:wait_for_resume(resumeJs))
return {
html = splash:html()
}
end
"""
splash_meta = {'splash': {'endpoint': 'execute', 'args': {'wait': 0.5, 'lua_source': script}}}
for url in self.start_urls:
yield scrapy.Request(url, self.after_login, meta=splash_meta)
def after_login(self, response):
print response.body
return
在执行splash:runjs(js)之后,我正在使用splash:wait(5)尝试使用splash:wait_for_resume来获取结果.这可能并不总是有效(网络延迟),那么有更好的方法吗?
解决方法:
事实证明,唯一的方法是使用splash:wait()但是在循环中执行并检查某些元素的可用性(如页脚).
def start_requests(self):
script = """
function main(splash)
assert(splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"))
assert(splash:go(splash.args.url))
local js = [[
var $j = jQuery.noConflict();
$j('#USER').val('frankcastle');
$j('#password').val('punisher');
$j('.button-oblong-orange.button-orange a').click();
$j('body').empty() // clear body, otherwise the wait_for footer will always be true
]]
assert(splash:runjs(js))
function wait_for(splash, condition)
while not condition() do
splash:wait(0.05)
end
end
wait_for(splash, function()
return splash:evaljs("document.querySelector('#footer') != null")
end)
return {
html = splash:html()
}
end
"""
splash_meta = {'splash': {'endpoint': 'execute', 'args': {'wait': 0.5, 'lua_source': script}}}
for url in self.start_urls:
yield scrapy.Request(url, self.after_login, meta=splash_meta)
内容总结
以上是互联网集市为您收集整理的python – ScrapyJS – 如何正确等待页面加载?全部内容,希望文章能够帮你解决python – ScrapyJS – 如何正确等待页面加载?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。