You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scrapy-Splash抓取europages动态手机号点击操作不生效问题咨询

问题原因及解决方案

1. LUA脚本逻辑问题

  • 未校验目标元素是否成功加载,网络延迟导致元素还没渲染就执行选择逻辑,直接静默失败,看起来就是点击未生效
  • 固定等待时间不可靠,代理波动、站点响应慢都会导致手机号还没加载完成就返回了页面源码
  • 手动计算坐标点击没有必要,mouse_click默认就是点击元素中心,坐标计算偏差反而可能触发无效点击

修改后的LUA脚本参考:

function main(splash)
    splash.private_mode_enabled = false
    -- 配置正常浏览器UA,避免被站点识别为爬虫拦截
    splash:set_user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
    -- 关闭图片加载减少资源占用,不影响JS执行
    splash.images_enabled = false
    assert(splash:go(splash.args.url))
    -- 等待目标元素加载完成,最多等5秒,加载失败直接报错方便排查
    assert(splash:wait_for(function()
        return splash:select('.page-action.click-tel') ~= nil
    end, 5))
    local element = splash:select('.page-action.click-tel')
    element:mouse_click()
    -- 等待手机号渲染完成,代替固定等待,判断逻辑可根据实际页面展示规则调整
    assert(splash:wait_for(function()
        return string.find(element:text(), '%d%d+') ~= nil
    end, 10))
    return splash:html()
end

2. 配置校验

  • 确认代理字符串格式正确:带用户名密码的代理标准格式为http://用户名:密码@代理地址:端口,拼写错误会导致点击后请求手机号的接口被拦截
  • 可先关闭代理做本地测试,排除代理本身的可用性问题
  • 现有scrapy_splash的中间件、缓存配置无问题,不需要额外调整

3. 快速排查手段

  • 打开本地Splash可视化调试界面,把LUA脚本粘贴进去直接运行,可直观看到点击效果和返回内容,快速区分是脚本问题还是Scrapy调用问题
  • 在parse函数中先打印完整的response.text,排除BeautifulSoup选择器写错导致的取值失败问题

补充

如果以上调整后点击仍未生效,检查.page-action.click-tel节点的子元素,部分站点会把点击事件绑定在内部的<span>或<a>标签上,直接选中子元素执行点击即可。

内容的提问来源于stack exchange,提问作者IndiaSke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:54:04