以编程方式单击 UIWebView 中的“提交”按钮(无元素 ID、名称、类或标记)
Programmatically clicking 'submit' button in UIWebView (no element id, name, class or tag)
我有以下代码,它使用一些凭据填充UIWebView
中加载的网站登录表单的用户名和密码字段。
NSString *usernamescript = @"document.getElementById('h_username').value='testingusername';";
[self.scrape stringByEvaluatingJavaScriptFromString:usernamescript];
NSString *passwordscript = @"document.getElementById('h_password').value='testingpassword';";
[self.scrape stringByEvaluatingJavaScriptFromString:passwordscript];
这些成功填充了输入字段,因为这两个元素都有一个我可以引用的单独id
。
但是,提交按钮没有可用于向其发送点击操作的元素、ID、名称、类或标签。
<span class="button"><input value="Log in" type="submit"/></span></div>
如何使用这些方法来识别我尝试引用的页面上的哪个按钮,从而向此特定提交按钮发送点击?
这是表单上下文中的按钮:
><div id="login"><div class="inner"><form id="homepageRegisteredLogin" action="/login/registeredUserUsernameAndPasswordLogin" method="post"><fieldset><legend class="off-screen">Login</legend><span class="label">Log in to my Opal account:</span><p id="loginErrorMessageBox" style="color: #fef7f5; background: #d21f01; text-align:center; margin: 0;display:none;"></p><div><label class="placeholder" for="h_username" id="username-label">Username</label><input maxlength="250" name="h_username" id="h_username" type="text"/> <label class="placeholder" for="h_password" id="password-label">Password</label><input maxlength="150" name="h_password" id="h_password" type="password"/> <input value="" name="attempt" type="hidden"/><span class="button"><input value="Log in" type="submit"/></span></div><a title="Forgot your username or password?" href="/login/forgotten">Forgot your username or password?</a></fieldset><div><input type="hidden" name="CSRFToken" value="28846d41-89b0-40ba-ae0f-6b644480385c"/>
也许一个有用的信息是:form id="homepageRegisteredLogin"
?
在
下面的评论后编辑
document.querySelector("input[type=submit]").click();
><div id="login"><div class="inner"><form id="homepageRegisteredLogin" action="/login/registeredUserUsernameAndPasswordLogin" method="post"><fieldset><legend class="off-screen">Login</legend><span class="label">Log in to my Opal account:</span><p id="loginErrorMessageBox" style="color: #fef7f5; background: #d21f01; text-align:center; margin: 0;display:none;"></p><div><label class="placeholder" for="h_username" id="username-label">Username</label><input maxlength="250" name="h_username" id="h_username" type="text"/> <label class="placeholder" for="h_password" id="password-label">Password</label><input maxlength="150" name="h_password" id="h_password" type="password"/> <input value="" name="attempt" type="hidden"/><span class="button"><input value="Log in" type="submit"/></span></div><a title="Forgot your username or password?" href="/login/forgotten">Forgot your username or password?</a></fieldset><div><input type="hidden" name="CSRFToken" value="28846d41-89b0-40ba-ae0f-6b644480385c"/>
这可能对你有帮助。 .
NSString *performSubmitJS = @"var passFields = document.querySelectorAll('"input[type='submit']'"); '
passFields[0].click()";
[webView stringByEvaluatingJavaScriptFromString:performSubmitJS];
相关文章:
- document.getElementById并使用id名称
- 如何使用jQuery迭代id名称的变体(如idname1、idname2)
- 当一个输入与另一个输入的 ID 具有相同的名称时的含义
- 从元素id中获取值,而不是从javascript中的名称中获取值
- 有没有一种简单的方法可以用包含id和名称(从a到Z)的对象填充数组
- AlloyUI图表生成器:按ID而不是名称连接节点
- 多个ID和一个唯一的名称
- FireFox-在全局作用域中由id名称引用的元素.使用w3c标准
- 如何在select标记上使用javascript获取id名称
- 选中没有ID的单选按钮,只有名称、类型和值
- 修改序列化表单函数以获取输入ID而不是名称
- 如何获取 ID 名称的子字符串
- 设置一个复选框,其中包含使用javaScript检查的特定名称和id
- 当名称空间在id参数之前声明时,Angular UI路由器停止工作
- 两个单独的表单,输入具有相同的名称和id
- 角度 - 动态 ng 模型名称,ID 在 ng 重复中
- 角度超前,其中模型作为 Id 和文本作为数组对象的名称
- 在一个对象的Javascript数组中,如果一个特定的数组元素本身就是一个对象数组,我如何通过名称/ID来定位该元素
- 如何查找Canvas元素中单击的对象名称/id
- 根据名称/id的一部分选择复选框