我正在尝试做的事情
在avito.ru(俄罗斯房地产网站)上,用户的电话是隐藏的,直到您点击它。我想用 Scrapy+Splash 收集手机。
示例网址:https ://www.avito.ru/moskva/kvartiry/2-k_kvartira_84_m_412_et._992361048
单击按钮后,将显示弹出窗口并显示电话。
我正在使用带有以下 Lua 脚本的Splash执行API:
function main(splash)
splash:go(splash.args.url)
splash:wait(10)
splash:runjs("document.getElementsByClassName('item-phone-button')[0].click()")
splash:wait(10)
return splash:png()
end
问题
未单击该按钮且未显示电话号码。这是一项微不足道的任务,我无法解释为什么它不起作用。
item-phone-button
如果我们替换为 ,单击对于同一页面上的另一个字段可以正常工作js-show-stat
。所以 Javascript通常可以工作,蓝色的“显示电话”按钮一定是特殊的。
我试过的
为了隔离问题,我创建了一个带有最小示例脚本的仓库和一个用于 Splash 的 docker-compose 文件: https ://github.com/alexanderlukanin13/splash-avito-phone
Javascript 代码是否有效,您可以在 Chrome 和 Firefox 中使用 Javascript 控制台进行验证
document.getElementsByClassName('item-phone-button')[0].click()
我已经用 Splash 版本 3.0、3.1、3.2 尝试过,结果是一样的。
更新
我也试过:
@Lore 的建议,包括
simulateClick()
方法(参见模拟点击分支)mouseDown/mouseUp 事件,如下所述:Simulating a mousedown, click, mouseup sequence in Tampermonkey? (见trigger_mouse_event分支)