Selenium HtmlUnitDriver Web抓取来自EC2服务器的验证码页

时间:2018-08-01 13:54:47

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

我写了一个简单的网页抓取工具来抓取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>

1 个答案:

答案 0 :(得分:2)

您是否涵盖以下主题:

-您正在使用哪个代理商?确保您使用的是与人类导航相同的代理,有关更多详细信息,请参见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/