【问题标题】:Selenium HtmlUnitDriver Web Scrape Got Captcha Page From EC2 ServerSelenium HtmlUnitDriver Web Scrape 从 EC2 服务器获取验证码页面
【发布时间】:2023-03-29 04:31:01
【问题描述】:

我编写了一个简单的网络抓取工具来抓取 expedia.com。使用 Java Selenium HtmlUnitDriver,如果我在本地运行它,我能够成功地从该站点抓取数据。

但是,当我将其部署到 EC2 服务器上时,它总是会返回 expedia 将其检测为机器人的页面,因此,它会显示此验证码以证明有人正在访问它。

我认为这可能与被 expedia.com 列入黑名单的 ec2 服务器的 IP 地址有关?

我尝试过抓取他们不关心/不进行人工测试的不同网站。

知道如何解决这个问题吗?

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

  • 将用户代理更改为我在本地浏览器上使用的东西
  • 设置代理

更新: 实际上设置代理服务器给了我一个不同的错误:

当前网址是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>

【问题讨论】:

  • 您可以与您的开发人员或各自的开发人员交谈,为您提供绕过验证码的测试环境。基本上captcha 不能自动化,如果可以,那么它就不能成为验证码。
  • 在这种情况下,您的意思是与 expedia 开发人员交谈吗?
  • 好吧,如果那是外部客户,那么没有人可以提供帮助。 :(
  • 如果您怀疑这可能是因为 ip,您还可以尝试将代理设置为与 EC2 使用的 IP 范围不同的我的头顶)。此外,尝试将您的用户代理字符串修改/欺骗为更常见的内容。
  • 从我的本地执行它与在我的 ec2 服务器上执行它的唯一不同之处在于,ip 不是这样吗?如果它在我的本地工作,这意味着该站点无法检测到 htmlunitdriver 抓取它...它必须是 ip...是否有可扩展的方式来设置代理?

标签: selenium selenium-webdriver web-scraping htmlunit htmlunit-driver


【解决方案1】:

您是否涵盖这些主题:

-您使用的是哪个代理?确保您使用的代理与您在人工导航中使用的代理相同,更多详细信息请参见 link

-您是否在导航中插入等待?如果页面加载后您尝试单击或导航,则这不是模拟常规导航。 More details.

-您使用的是哪个驱动程序,chromedriver 有一个技巧可以将内部变量“cdc_”重命名为其他名称,例如“aaa_”,然后如果服务器中有 JavaScript 代码试图检测此变量 (cdc_),它会失败。 More details.

-如果你真的不需要被服务器检测到,还有很多东西需要研究:

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

有趣的文章:

https://www.kdnuggets.com/2018/02/web-scraping-tutorial-python.html

https://antoinevastel.com/bot%20detection/2017/08/05/detect-chrome-headless.html

https://intoli.com/blog/making-chrome-headless-undetectable/

【讨论】:

  • 尝试将用户代理设置为我在本地浏览器上使用的东西,我也尝试设置代理 - 两者都不起作用...
  • 从我的本地执行它与在我的 ec2 服务器上执行它的唯一不同之处在于,ip 不是这样吗?如果它在我的本地工作,这意味着该站点无法检测到 htmlunitdriver 抓取它...它必须是 ip...是否有可扩展的方式来设置代理?
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多