Reputation: 733
I simply created this app:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView view = (WebView) findViewById(R.id.webView);
WebSettings faller = view.getSettings();
faller.setJavaScriptEnabled(true);
view.loadUrl("http://catcheat.net/test/test.html");
view.setWebViewClient(new WebViewClient());
}
}
Now what I want to do is to click programmatically in the unique button that is displayed on the page But I really don't know how to do. I ve read every post like this here but nobody could help me.
This is the HTML page:
<html>
<body>
<form name="pg_frm" method="post" action="https://www.paygol.com/pay" >
<input type="hidden" name="pg_serviceid" value="333818">
<input type="hidden" name="pg_currency" value="EUR">
<input type="hidden" name="pg_name" value="Donation">
<input type="hidden" name="pg_custom" value="">
<input type="hidden" name="pg_price" value="0.5">
<input type="hidden" name="pg_return_url" value="">
<input type="hidden" name="pg_cancel_url" value="">
<input type="image" name="pg_button" src="https://www.paygol.com/webapps /buttons/en/white.png" border="0" alt="Make payments with PayGol: the easiest way!" title="Make payments with PayGol: the easiest way!" >
</form>
</body>
</html>
Upvotes: 9
Views: 28265
Reputation: 1147
// important don't forget to set below line in onCreate
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
// instead of wp-submit you can set your own element id
webView.loadUrl("javascript:(function(){document.getElementById('wp-submit').click();})();");
}
});
Upvotes: 2
Reputation: 71
If you want to click on a button inside html page like skip as button for adfly or other sites.
Use this code
webview.loadUrl("javascript:document.getElementById('skip_button').click()");
Upvotes: 7
Reputation: 733
I figured out what the problem was. I had to wait that the page was loaded before to call another view.load..
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView view = (WebView) findViewById(R.id.webView);
WebSettings faller = view.getSettings();
String url = "http://catcheat.net/test/test.html";
faller.setJavaScriptEnabled(true);
view.loadUrl(url);
view.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view , String url){
view.loadUrl("javascript:clickFunction()");
}
});
}
Upvotes: 3
Reputation: 2731
if your Button is in your Html page so you can simply run javaScript code to simulate click event like this:
view.loadUrl("javascript:clickFunction()");
also you need to define clickFunction in your Html page:
function clickFunction() {
//click event
}
or you can add above function by javascript too:
view.loadUrl("javascript:clickFunction(){ //click event })()");
UPDATE:
<html>
<head>
<script>
function clickFunction(){
var form = document.getElementById("myform");
form.submit();
}
</script>
</head>
<body>
<form id="myform" name="pg_frm" method="post" action="https://www.paygol.com/pay" >
<input type="hidden" name="pg_serviceid" value="333818">
<input type="hidden" name="pg_currency" value="EUR">
<input type="hidden" name="pg_name" value="Donation">
<input type="hidden" name="pg_custom" value="">
<input type="hidden" name="pg_price" value="0.5">
<input type="hidden" name="pg_return_url" value="">
<input type="hidden" name="pg_cancel_url" value="">
<input type="image" name="pg_button" src="https://www.paygol.com/webapps /buttons/en/white.png" border="0" alt="Make payments with PayGol: the easiest way!" title="Make payments with PayGol: the easiest way!" >
</form>
</body>
</html>
Upvotes: 7
Reputation: 69
I don't think faking a users click is possible (at least I'd imagine for security reasons alone it shouldn't be allowed, imagine forcing a user to click on questionable advertisment, external links or maybe even in-app buy buttons, ...)
What you could do is figure out what exactly the button click is doing and bypass it!
1) Does it make some html visible? -> Save webpage as string and inject javascript to make the hidden stuff visible 2) Does it load stuff in the background (like a list of data..) -> Use Fiddler to inspect the request, Save webpage as string, fake the request and inject the data yourself 3) ...
Depends a lot on what your button is doing ;)
Upvotes: -1