gpt4 book ai didi

python - Scrapy Splash 点击按钮不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:55:43 30 4
gpt4 key购买 nike

我想做什么

在 avito.ru(俄罗斯房地产网站)上,某人的电话在您点击它之前是隐藏的。我想用Scrapy+Splash收集手机。

示例网址:https://www.avito.ru/moskva/kvartiry/2-k_kvartira_84_m_412_et._992361048

screenshot: Phone is hidden

点击按钮后,弹出窗口,手机可见。

enter image description here

我正在使用 Splash execute具有以下 Lua 脚本的 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 试过了,结果是一样的。

更新

我也试过:

最佳答案

以下脚本对我有用:

function main(splash, args)
splash.private_mode_enabled = false
assert(splash:go(args.url))
btn = splash:select_all('.item-phone-button')[2]
btn:mouse_click()
btn.style.border = "5px solid black"
assert(splash:wait(0.5))
return {
num = #splash:select_all('.item-phone-button'),
html = splash:html(),
png = splash:png(),
har = splash:har(),
}
end

原始解决方案有 2 个问题:

  1. 有 2 个元素具有“item-phone-button”类,感兴趣的按钮是第二个。我通过设置 btn.style.border = "5px solid black" 检查了哪个元素匹配。
  2. 此网站需要禁用私有(private)模式,可能是因为它使用了 localStorage。检查http://splash.readthedocs.io/en/stable/faq.html#website-is-not-rendered-correctly其他常见建议。

关于python - Scrapy Splash 点击按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276401/

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