Extracting Data From CAPTCHA-Protected Websites
使用CAPTCHA保護的網(wǎng)站上的半自動和全自動數(shù)據(jù)提取功能。全自動數(shù)據(jù)提取需要一個第三方CAPTCHA服務的賬戶,每個驗證碼的費用都要收費。半自動數(shù)據(jù)提取是免費的,但是需要您在運行數(shù)據(jù)提取項目時手工解碼CAPTCHA圖像。
使用代理服務器
有時,CAPTCHA保護網(wǎng)站的最簡單的解決方案是使用代理服務器列表。當CAPTCHA頁面在瀏覽網(wǎng)站一段時間后會隨機顯示,這一點尤其正確。如果你總是需要通過驗證碼頁面才能進入網(wǎng)站的某個部分,代理服務器將不會有幫助。
半自動數(shù)據(jù)提取
要為半自動驗證碼的處理配置數(shù)據(jù)提取項目,您需要做以下工作:
- 添加一個選擇CAPTCHA圖像的內(nèi)容元素。然后使用Misc options選項卡來不選Save content選項。
- 添加一個FormField元素來選擇CAPTCHA輸入字段。然后使用高級選項選項卡來選擇圖像元素作為CAPTCHA元素。
- 添加一個提交CAPTCHA表單的FormSubmit模板。如果不總是顯示CAPTCHA表單,您可能需要設(shè)置Misc選項在可選模板(Optional template)。
當 Visual Web Ripper遇到CAPTCHA元素時,它會顯示CAPTCHA圖像并請求驗證碼碼。

全自動數(shù)據(jù)提取
完整的自動驗證碼處理需要一個第三方驗證碼的帳戶。第三方識別服務必須提供服務.NET API,您必須創(chuàng)建一個Visual Web Ripper腳本,該腳本使用這個API來調(diào)用服務。
Visual Web Ripper 包括API和標準腳本來調(diào)用下面的驗證碼識別服務。
要配置您的數(shù)據(jù)提取項目來實現(xiàn)完全自動化的CAPTCHA處理,您需要做以下工作:
- 添加一個選擇CAPTCHA圖像的內(nèi)容元素。然后使用Misc options選項卡來取消Save content選項。
- 添加一個FormField元素來選擇CAPTCHA輸入字段。然后使用高級選項選項卡來選擇圖像元素作為CAPTCHA元素。
- 使用AdvancedOptions選項卡向選擇CAPTCHA輸入字段的FormField元素添加一個Decode CAPTCHA script。
- 添加一個提交CAPTCHA表單的FormSubmit模板。如果不總是顯示CAPTCHA表單,您可能需要設(shè)置Misc選項在*Optional template *。
打碼腳本
一個解碼的CAPTCHA腳本被用來調(diào)用驗證碼識別服務。這個腳本得到CAPTCHA圖像是一個輸入?yún)?shù),并且應該以字符串格式返回解碼的CAPTCHA值。
你可以通過在Advanced Options中點擊Decode CAPTCHA script選項按鈕,向FormField元素添加一個解碼驗證碼腳本。

在您點擊解碼驗證碼腳本按鈕后,腳本編輯器就會打開。

默認的解碼CAPTCHA腳本是設(shè)計用于處理 www.deathbycaptcha.com服務,如果您正在使用該服務,您只需要添加您的登錄名和密碼。
Visual Web Ripper 也很容易支持 bypasscaptcha.com 如果您正在使用這個CAPTCHA服務,您可以使用以下代碼。
string captcha = BypassCaptchaService.DecodeCaptcha(args.ImagePath, "key");
一個解碼驗證碼腳本可以寫入C# or VB.NET.
C# and VB.NET Scripts
一個解碼驗證碼腳本必須有一個方法,如下所示。
using System;
using mshtml;
using VisualWebRipper;
public class Script
{
//See help for a definition of WrDecodeCaptchaArguments.
public static string DecodeCaptcha(WrDecodeCaptchaArguments args)
{
try
{
//Getting captcha from Decapcher.
string captcha = DeathByCaptchaService.DecodeCaptcha
(args.ImagePath, "login", "password");
return captcha;
}
catch (Exception exp)
{
args.WriteDebug(exp.Message);
return "" ;
}
}
}
public static bool DecodeCaptcha(WrDecodeCaptchaArguments args)
腳本的方法DecodeCaptcha() 必須有這個確切的名稱和簽名,所以只更改方法體,而不是方法簽名。該方法必須返回解碼驗證碼的值。
WrProjectInitializeArguments Properties
| Name | Type | Description |
|---|---|---|
| ImagePath | String | The CAPTCHA image path. |
| Project | WrProject | The current Visual Web Ripper project. |
| DestinationDataSource | WrDataSource | Destination data source configuration. |
| InputDataSource | WrInputDataSource | Input data source configuration. |
| StartTemplate | WrTemplate | The first template in the project. |
| Database | WrSharedDatabase | An open database connection. * See Script Utilitiesfor more information about shared script databases. |
| InputParameters | WrInputParameters | Input parameters for the current project. * See Using Input Parameters</a> for more information about input parameters. |