Selenium HtmlUnitDriver 网络爬虫从 EC2 服务器获取验证码页面

7

我写了一个简单的网页爬虫来抓取expedia.com。使用Java Selenium HtmlUnitDriver,如果在本地运行,则能够成功从网站上抓取数据。

然而,当我将其部署到EC2服务器上时,它总是返回一个页面,显示 expedia 检测到它作为机器人,并展示验证码以证明正在访问的是人类。

我认为这可能与 EC2 服务器的 IP 地址有关,有些原因导致该地址被 expedia.com 列入黑名单?

我已经尝试抓取一些不关注/不进行人类测试的不同网站。

您有什么想法如何解决这个问题吗?

我尝试过的但仍被检测为机器人的事情:

  • 将用户代理更改为我在本地浏览器中使用的内容
  • 设置代理

更新: 实际上设置代理服务器会给我带来不同的错误:

当前 URL 是https://www.expedia.com/things-to-do/search?location=Paris&pageNumber=1

htmlString:

<!--?xml version="1.0" encoding="ISO-8859-1"?-->
<html>
 <head> 
  <title>
      500 Internal Server Error
    </title> 
 </head> 
 <body> 
  <h1> Internal Server Error </h1> 
  <p> The server encountered an internal error or misconfiguration and was unable to complete your request. </p> 
  <p> Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error. </p> 
  <p> More information about this error may be available in the server error log. </p> 
  <hr> 
  <address> Apache/2.4.18 (Ubuntu) Server at www.expedia.com Port 443 </address>   
 </body>
</html>

你可以与你的开发人员或相关的开发人员交流,以便他们为你提供测试环境来绕过验证码。基本上,如果验证码可以被自动化处理,那么它就会失效。 - cruisepandey
在这种情况下,您是指与Expedia开发人员交谈吗? - user1955934
好吧,如果那是一个外部客户端,那么没有人能帮忙。 :( - cruisepandey
如果您怀疑是因为IP地址的问题,可以尝试设置代理到不同于EC2使用的IP范围(例如您自己的IP),但我不知道如何从头开始设置。此外,尝试修改/欺骗您的用户代理字符串为更常见的内容。 - DatenBergwerker
唯一不同的是在本地执行和在我的EC2服务器上执行的唯一区别就是IP地址,对吧?如果在本地可以运行,那么这意味着该网站无法检测到使用HTMLUnitDriver进行爬取...必须是IP地址的问题...有没有可扩展的方法来设置代理? - user1955934
1个回答

2

您是否涉及以下主题:

- 您正在使用哪个代理?确保您使用的是与人类导航相同的代理,更多细节请参阅此链接

- 在您的导航中是否插入了等待时间?如果在页面加载后立即尝试点击或导航,则无法模拟常规导航。 更多细节

- 您正在使用哪个驱动程序,有一个技巧可以重命名内部变量“cdc_”为其他名称,如“aaa_”,然后如果服务器中有JavaScript代码尝试检测此变量(cdc_),则将失败。更多细节

- 如果您真的需要不被服务器检测到还有更多需要学习的事情:

-Is there a honeypot in place?
-Are your IP (EC2 IP) already blocked? You could redirect using a VPN tunnel.

有趣的文章:

使用Python进行网络爬虫教程

如何检测Chrome Headless

使Chrome Headless难以检测


尝试将用户代理设置为我在本地浏览器上使用的内容,还尝试设置代理 - 两者都没有起作用... - user1955934
唯一不同的是在本地执行和在我的EC2服务器上执行的唯一区别就是IP地址,对吧?如果在本地可以运行,那么这意味着该网站无法检测到使用HTMLUnitDriver进行爬取...必须是IP地址的问题...有没有可扩展的方法来设置代理? - user1955934

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接