【问题标题】:How to bypass Incapsula with Python如何使用 Python 绕过 Incapsula
【发布时间】:2018-09-19 22:13:16
【问题描述】:

我使用Scrapy,并尝试抓取使用Incapsulathis site

<meta name="robots" content="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3">
</script>

两年前我已经向Question 询问过这个问题,但是这种方法(Incapsula-Cracker)不再起作用了。

我试图理解 How Incapsula works 并试图绕过它

def start_requests(self):
    yield Request('https://courses-en-ligne.carrefour.fr',  cookies={'store': 92}, dont_filter=True, callback = self.init_shop)
def init_shop(self,response) :
    result_content      = response.body
    RE_ENCODED_FUNCTION = re.compile('var b="(.*?)"', re.DOTALL)
    RE_INCAPSULA        = re.compile('(_Incapsula_Resource\?SWHANEDL=.*?)"')
    INCAPSULA_URL       = 'https://courses-en-ligne.carrefour.fr/%s'
    encoded_func        = RE_ENCODED_FUNCTION.search(result_content).group(1)
    decoded_func        = ''.join([chr(int(encoded_func[i:i+2], 16)) for i in xrange(0, len(encoded_func), 2)])
    incapsula_params    = RE_INCAPSULA.search(decoded_func).group(1)
    incap_url           = INCAPSULA_URL % incapsula_params
    yield Request(incap_url)
def parse(self):
    print response.body 

但我被重定向到RE-Captcha Page

<html style="height:100%">
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
<body style="margin:0px;height:100%">
<iframe src="/_Incapsula_Resource?CWUDNSAI=27&xinfo=3-10784678-0%200NNN%20RT%281523525225370%20394%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B12%284%2c316%2c0%29%20U10000&incident_id=459000960022408474-41333502566401539&edet=12&cinfo=04000000" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 459000960022408474-41333502566401539
</iframe>
</body>
</html>

【问题讨论】:

  • @TarunLalwani 是的,我尝试使用 Splash 和 Selenium
  • @TarunLalwani 是的
  • 请加入这个chat房间
  • 你试过为爬虫定义一个假的用户代理吗?
  • 为什么不直接支付验证码解决服务?

标签: python scrapy recaptcha incapsula


【解决方案1】:

这不是最好的答案,只是给出一些要点来理解为什么进行网络抓取并不容易,主要是在前面有 CDN 的情况下。

首先,最好检查一下你将要对抗的对象,WAFBot Mitigation

那么为了获得更多的想法,这是一个很好的谈话:How Attackers Circumvent CDNs to Attack Origin

现在,这并不意味着无法进行网页抓取,这里的问题现在减少到时间/速度,您尝试高速度的速度越快,您触发验证码的更改在最坏的情况下甚至被完全阻止.

有多种方法,例如每个请求使用不同的 IP:Make requests using Python over Tor、更改用户代理等。但其中大多数都绑定到一组定义的超时和您可能需要找到的查询模式。

【讨论】:

    【解决方案2】:

    首先,对于此类问题没有万无一失的解决方案。我作为一个实际用户最终不得不在 StackOverflow 上回答时解决验证码。这意味着机器人肯定会得到验证码。

    现在我尝试遵循一些规则来减少验证码的机会

    • 永远不要将共享代理用于此类项目。使用TOR 是一个很大的NO
    • 使用Chrome + Selenium + Proxy
    • 将 Chrome 与 existing profile 一起使用。我更喜欢拥有不同网站的浏览历史记录、来自许多其他网站和跟踪器的 cookie 以及回溯到一个月的个人资料。您不知道如何评估用户/机器人差异。因此,您希望看起来更像真正的用户
    • 永远不要快速抓取,使用尽可能多的延迟和尽可能随机的延迟
    • 始终使用可见浏览器并持续监控验证码,在验证码出现时手动解决验证码或使用 DeathByCaptcha 或类似服务。尽量不要中止验证码页面,因为它可能会将您的机器人概率检查提高到更高的等级

    这是一场猫捉老鼠的游戏,你不知道对方有什么防御手段。所以你试着玩的轻松愉快

    【讨论】:

      猜你喜欢
      • 2019-10-03
      • 1970-01-01
      • 2022-09-27
      • 2018-05-22
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多