- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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 - 如何正确等待页面加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400214/
我正在使用 ScrapyJS 和 Splash 来模拟表单提交按钮的点击 def start_requests(self): script = """ function
我正在使用 Splash 2.0.2 + Scrapy 1.0.5 + Scrapyjs 0.1.1,但我仍然无法通过点击渲染 javascript。这是一个示例网址 https://olx.pt/a
我正在尝试使用这个 scrapy 插件(或者它是什么):scrapyjs . 但是没有安装说明,而且我是 Python 新手。我缺少一些基本的东西吗?我如何将其与 scrapy 项目集成。 注意:我更
我正在尝试应用Scrapy(scrapyjs)来抓取带有脚本的页面,以获得完整加载的页面。我应用splash + scrapy使用以下代码渲染它。这与直接使用 localhost:8050 服务器的参
我正在尝试编写一个获取 javascript 代码的小型网络解析器。为此,我尝试使用 ScrapyJS 通过 Javscript 扩展 Scrapy。 我已按照 the official reposi
你好,我已经安装了 Scrapyjs + Splash,我使用下面的代码 import json import scrapy from scrapy.linkextractors import Lin
我是一名优秀的程序员,十分优秀!