【问题标题】:Load image from web page, captcha, fill textfield从网页加载图像,验证码,填充文本字段
【发布时间】:2012-09-01 18:09:05
【问题描述】:

晚上好。在我的应用程序中,我需要向需要验证码的网页发送请求。图片链接是一个 .php 文件,每次刷新页面时验证码都会发生变化。所以,如果我尝试“通过链接”下载图像,我有不同的验证码。解决办法是什么?任何的想法?提前谢谢你。

编辑:现在我必须填写输入并发送提交请求。这是我必须填写的文本字段的 html 源代码:

<label class="ins" for="targ">Targa del veicolo:</label>
<input id="targ" name="targa" value="" type="text" size="20" maxlength="8" tabindex="2" />

<label for="inCaptchaChars">Codice di sicurezza:</label>  <input type="text" id="inCaptchaChars" name="inCaptchaChars" tabindex="1004" onblur="ShutMeDown()">

这是关于提交按钮的:

<input type="submit" name="procedi"  value="Calcola importo" />

我必须做什么才能继续?我必须使用 ASIHTTP?

【问题讨论】:

  • 您能否澄清一下,您每次都尝试获取相同的验证码,而不管脚本为您提供的随机验证码如何?
  • 不,也许我不够清楚。所以.. 如果我发送加载网页的请求,网页需要验证码(即 CAPTCHA1)。然后我必须发送一个下载验证码的请求,但是当我重新发送请求时,验证码发生了变化。我需要在一个请求中发送两个请求(加载页面和下载图像)。

标签: iphone objective-c uiwebview uitextfield asihttprequest


【解决方案1】:

这可能有点复杂,但应该可以正常工作:

使用 webView,加载页面,当加载的页面调用获取图像大小和偏移量的 webview (stringByEvaluatingJavascript) 上的一些 javascript。将 WebView 框架调整为该大小,并将内容滚动到该偏移量。禁用用户交互并显示 webview。 要获取元素偏移量,您可以使用this answer

只需调用:

[[webView stringByEvaluatingJavascript:@"function getOffset(el) {  .....  }  getOffset( document.getElementById('yourElId') ).left;"] floatValue];

不是你必须将整个代码传递给这个方法

提交验证码: 和以前一样,调用

[webView stringByEvaluatingJavascript :@"document.getElementsByName('procedi')[0].value = 'your captcha';"];

然后在提交按钮上调用.click() 或在表单上调用.submit()

【讨论】:

  • 我可以用什么类型代替var?
  • 我不明白这个问题。您需要将该代码作为字符串传递给 stringByEvaluatingJavascript 方法。然后让代码返回值,您将在 obj.c 中读取这些值。我会更新答案。
  • 谢谢,现在我已经裁剪了 webview。现在的问题是发送请求。我用过 ASIHTTP 吗?
  • 可以在webview中填写并通过javascript提交
猜你喜欢
  • 2016-05-11
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2014-06-27
相关资源
最近更新 更多