Python Escape splash:在lua代码中选择查询选择器

Python Escape splash:在lua代码中选择查询选择器,python,lua,scrapy,scrapy-splash,splash-js-render,Python,Lua,Scrapy,Scrapy Splash,Splash Js Render,在splash:select 我在scrapy中有一个splash请求,它使用lua等待一个特定的元素。此元素是id中带有句点的id。我似乎无法正确地转义句点。我尝试了单反斜杠和双反斜杠(\和\) 预期结果是从请求的页面完全加载html 实际结果是: WARNING: Bad request to Splash: {'description': 'Error happened while executing Lua script', 'error': 400, 'type': 'ScriptEr

splash:select

我在scrapy中有一个splash请求,它使用lua等待一个特定的元素。此元素是id中带有句点的id。我似乎无法正确地转义句点。我尝试了单反斜杠和双反斜杠(
\
\

预期结果是从请求的页面完全加载html

实际结果是:

WARNING: Bad request to Splash: {'description': 'Error happened while executing Lua script', 'error': 400, 'type': 'ScriptError', 'info': {'error': "invalid escape sequence near '\\.'", 'source': '[string "..."]', 'message': '[string "..."]:5: invalid escape sequence near \'\\.\'', 'line_number': 5, 'type': 'LUA_INIT_ERROR'}}
使用
\
\\

lua_script = '''
    function main(splash)
        splash:set_user_agent(splash.args.ua)
        assert(splash:go(splash.args.url))
        while not splash:select('div#some.id.here') do
            splash:wait(0.1)
        end
        return {html=splash:html()}
    end
'''
如果我尝试转义
splash:中的字符串,请按如下方式选择

splash:select(\'div#some.id.here\')

代码持续运行(我相信这是朝着正确方向迈出的一步,但我认为在这个阶段代码运行正确,但它试图找到一个多类div,而不是ID包含句点的div)

您有一个包含Lua代码的Python字符串

'splash:select(\'div#some.id.here\')'
你的飞溅物需要你避开

所以我们需要预先准备一个反斜杠

为了避免Lua中出现无效的转义序列
\。
错误,我们必须通过在另一个反斜杠前面加上前缀来转义反斜杠<代码>\\.

由于我们仍然处于Pyton字符串中,我们必须再次摆脱2个反斜杠。导致总共四个反斜杠

'splash:select(\'div#some\\\\.id\\\\.here\')'
Python
'\\\.
将被Lua解释为
'\\.
,在
splash:select
调用中,Lua将最终解释为
'\.


我希望这是有道理的。我无法测试它。

你为什么要逃课?你不应该转义Python字符串中的单引号吗?@pipeet由于
splash:select
的工作原理,这段代码将永远运行(我认为需要转义句点)。我将更新我的问题,以包括当我逃离字符串时会发生什么:)谢谢!返回的html仍然是错误的,但我认为这是出于不同的原因,我将对此提出一个新问题