2012-04-06 10 views
2

UIWebViewを使用してデータを自動入力する際に​​、RegsExを使用してログインフォームを検索するにはどうすればよいですか?UIWebViewで開いているHTMLページのユーザー名とパスワードの自動入力

私は、すべてのフォームデータを取得するために、次のコードを使用しています

int NoOfForms = [[self.browser stringByEvaluatingJavaScriptFromString:@"document.forms.length"] intValue]; 

NSMutableArray *formData = [[NSMutableArray alloc] initWithCapacity:0]; 

for (int i = 0 ; i < NoOfForms ; i++) 
{ 
    // total number of elements in each form 
    int elementsInForm = [[self.browser stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.forms[%d].elements.length",i]] intValue]; 
    for (int j = 0; j < elementsInForm; j++) 
    { 
     // element id of each element 
     NSString *elementID = [NSString stringWithFormat:@"document.forms[%d].elements[%d].id",i,j]; 
     // element value of each element 
     NSString *elementValue = [NSString stringWithFormat:@"document.forms[%d].elements[%d].value",i,j]; 

     // dictionary for all values of each element 
     NSDictionary *elementData = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:i],@"form No", 
            [NSNumber numberWithInt:j],@"element No", 
            [self.browser stringByEvaluatingJavaScriptFromString:elementID],@"elementID", 
            [self.browser stringByEvaluatingJavaScriptFromString:elementValue],@"elementValue",nil]; 

     // add each element data to a mutable array. 
     [formData addObject:elementData]; 
    } 
} 

し、それぞれのフィールドに戻ってデータを置くために、次のコードを持っている:

for (int i = 0 ; i < [dataArray count]; i++) 
{ 
    NSDictionary *elementDict = [dataArray objectAtIndex:i]; 

    int formNumber = [[elementDict objectForKey:@"form No"] intValue]; 
    int elementNumber = [[elementDict objectForKey:@"element No"] intValue]; 
    NSString *formElementID = [elementDict objectForKey:@"elementID"]; 
    NSString *formElementValue = [elementDict objectForKey:@"elementValue"]; 

    if ([[self.browser stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.forms[%d].elements[%d].id",formNumber,elementNumber]] isEqualToString:formElementID]) 
    { 
      [self.browser stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.forms[%d].elements[%d].value='%@'",formNumber,elementNumber,formElementValue]]; 
    } 

} 

は今、私は提出したいですログインフォーム..それを見つける方法?

私のコードでパスワードをフィールドに入力すると、mail.google.comのような一部のWebサイトでパスワードフィールドが空になります。この問題を解決するには?

更新:現在、私はmail.google.comにログインすることができましたが、belleandclive.comで同じことをすることはできませんでした。このサイトはログインフォームのセキュリティ測定を実装していますか?

答えて

2

フォームデータやフォームIDに基づいてログインフォームが判断できると思いますか?

ログインフォームIDがlogin-formであれば、あなたはそれを提出するには、次のコードを使用することができます。

NSString * js = @"document.getElementById('login-form').submit()"; 
[self.webview stringByEvaluatingJavaScriptFromString:js]; 

か、インデックスがフォームデータを応じたログインフォームで判定によるフォームsumbitことができます。

int index = ....// your judge code to get index 
NSString * js = [NSString stringWithFormat:@"document.forms[%d].submit()", index]; 
[self.webview stringByEvaluatingJavaScriptFromString:js]; 
関連する問題