如何定制一款12306抢票浏览器――处理预定页面和验证码自动识别功能(五)

2014-11-24 08:18:58 · 作者: · 浏览: 8
inated LPOLESTR lpstrCaption,
/* [in] */ DWORD dwType,
/* [annotation][in] */ __in __nullterminated LPOLESTR lpstrHelpFile,
/* [in] */ DWORD dwHelpContext,
/* [out] */ LRESULT *plResult )
{
*plResult = 0;
return S_OK;
}
从上面代码看,我并没有记录alert的内容。因为我发现了一个更为有效和简单的办法去判断是否成功了。我们看下提交没有成功时HTML网页结构
我们再看下提交成功的页面的网页结构
可以见得,提交成功的页面中新增了两个Div。其中最下面那个Div就是确认信息的HTML代码
于是完整的预定流程是
[cpp]
HRESULT CDeal12306WebPage::BookTickets( CComPtr & spDoc )
{
HRESULT hr = E_FAIL;
do {
CComPtr spTableQrTbody;
hr = GetTableQrTbody( spDoc, spTableQrTbody);
CHECKHRPOINTER(hr, spTableQrTbody);
if ( m_stTrainNoPassenger.vecPassengerInfo.size() > MAXPASSENGERCOUNT) {
ATLASSERT(FALSE);
}
hr = AddPassengerInfo( spTableQrTbody, m_stTrainNoPassenger.vecPassengerInfo );
CHECKHR(hr);
DWORD dwCount = 0;
Sleep(6*1000);
do {
hr = SetCaptchaEx( spTableQrTbody );
CHECKHR(hr);
hr = ClickSubmitButton(spTableQrTbody);
CHECKHR(hr);
dwCount++;
} while ( FAILED(ConfirmOrd(spDoc)));
} while (0);
return hr;
}
[cpp]
HRESULT CDeal12306WebPage::ConfirmOrd( CComPtr & spDoc )
{
HRESULT hr = E_FAIL;
do {
CComPtr spDiv;
hr = GetOrderConfirm( spDoc, spDiv);
CHECKHRPOINTER(hr, spDiv);
CComPtr spOkButton;
hr = GetConfirmOKElem(spDiv, spOkButton);
CHECKHRPOINTER(hr, spOkButton);
hr = spOkButton->click();
CHECKHR(hr);
} while (0);
return hr;
}