Objective-C:以编程方式单击网站按钮
Posted
技术标签:
【中文标题】Objective-C:以编程方式单击网站按钮【英文标题】:Objective-C: Click Website Button Programmatically 【发布时间】:2014-05-26 05:46:35 【问题描述】:如何通过 Objective-C 以编程方式按下网站上的按钮?目前,我向网站发送 HTTP 帖子并检索返回的 NSData
:
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://grades.bsd405.org/Pinnacle/Gradebook/Logon.aspx?ReturnUrl=%2fPinnacle%2fGradebook%2fInternetViewer%2fGradeSummary.aspx"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
//[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[request setTimeoutInterval:20];
[NSURLConnection connectionWithRequest:request delegate:self];
发送 HTTP 帖子会返回正确的 NSData
,但服务器每隔几周会更新一次 HTTP 帖子属性,例如 viewState
和 eventValidation
。这使我无法对这些值进行硬编码。有没有办法使用 javascript 使用用户名和密码向网站发送新闻,或者动态输入 viewState
和 eventValidation
参数?这是我正在尝试实施此流程的网站:https://grades.bsd405.org/Pinnacle/Gradebook/Logon.aspx?ReturnUrl=%2fPinnacle%2fGradebook%2fDefault.aspx
【问题讨论】:
【参考方案1】:您可以编写 web 服务来获取服务器更新的 HTTP 发布属性,例如 viewState 和 eventValidation。 获得这些最新属性后,您可以在最终的网络请求中发布。
【讨论】:
我可以通过在 Google Chrome 开发者工具中检查它们的值来获取更新的 HTTP 帖子属性。然而,问题是当他们改变时,我的应用程序停止工作。我需要对其进行设计,以便即使网站更改了 HTTP 发布属性,它也能继续工作。 如果您可以在 google chrome 中获取 post 属性,那么您可以在 NSURLConnection 中请求相同的 url 并检查响应和数据,它应该包含与浏览器中相同的值。 没错。当我从谷歌浏览器获得帖子属性时,我的应用程序运行良好,因此我完成了我的应用程序并在 App Store 上发布了它。问题是几天前,该网站更新了它的帖子属性,现在我的应用程序根本无法运行。有没有办法在网站上输入用户名和密码,然后使用 Javascript 按 Enter 按钮,这样即使网站的帖子属性发生变化,我的应用程序也能正常工作? 抱歉,您需要在应用商店上制作一个新版本来修复这些问题。 是的,一旦我弄清楚如何解决这些问题,我将发布更新。问题是我不知道该怎么做。以上是关于Objective-C:以编程方式单击网站按钮的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C 以编程方式在另一个视图控制器上显示视图控制器
使用 Objective-C iOS 以编程方式创建 TableVIew
IOS / Objective-C:以编程方式在按钮下的中心线