webbrowser klik op knop

Status
Niet open voor verdere reacties.

sharq

Gebruiker
Lid geworden
26 nov 2011
Berichten
36
hallo allemaal,
ik ben een bot voor een spel aan het maken, en ik weet al hoe je tekst in een form krijgt:
Code:
wb.Document.All("asdfadf").InnerText = "asdfasdf"

maar ik wil ook weten hoe je op een knop kan drukken en daar kom ik maar niet achter, ik heb al dit geprobeerd:
Code:
wb.Document.GetElementById("target_attack").InvokeMember("submit")

maar dat werkt niet.
kan iemand helpen?, alvast bedankt

mvg,
jan
 
[cpp]wb.Document.GetElementById("target_attack").InvokeMember("click")[/cpp]

Werkt dat wel?
 
nee dat werkte niet, maar misschien is de taget_attack niet goed of de click
dit is de html code van de website rondom de knop:
helemaal onderaan is de knop.


Code:
<td id=​"content_value">​<td id="content_value">
 <form action="/game.php?village=4833&amp;screen=place&amp;action=command&amp;h=c751" method="post" onsubmit="this.submit.disabled=true;">
<input type="hidden" name="attack" value="true">
<h2>Aanval</h2>
<input type="hidden" name="ch" value="ce374b62de983b5eb9b2dd613b26c9bd11a65c8c">
<input type="hidden" name="x" value="451">
<input type="hidden" name="y" value="567">
<input type="hidden" name="action_id" value="790190">
<table class="vis" width="300">
<tbody><tr>
	<th colspan="2">
				<span id="default_name_span"><span id="default_name">Bevel</span> <a href="#" onclick="editToggle('default_name_span', 'edit_name')"><img src="graphic/rename.png?1" alt="umbenennen" title="umbenennen"></a></span>
		<span id="edit_name" style="display: none;"><input type="text" id="new_attack_name" onkeypress="if( (event.keyCode || event.which) != 13) return true; $('#attack_name_btn').click(); return false;"><input id="attack_name_btn" type="button" value="Ok" onclick="renameAttack('new_attack_name','default_name', 'attack_name');editToggle('edit_name', 'default_name_span');"></span>
		<input id="attack_name" name="attack_name" type="hidden" value="">
			</th>
	</tr>
<tr><td>Doel:</td><td><a href="/game.php?village=4833&amp;screen=info_village&amp;id=5274">sterchele 001 (451|567) C54</a></td></tr>
<tr><td>Speler:</td><td><a href="/game.php?village=4833&amp;screen=info_player&amp;id=605563">jonas23</a></td></tr>
<tr><td>Duur:</td><td>0:09:00</td></tr>
<tr>
	<td>Aankomst:</td>
	<td id="date_arrival">
		vandaag om 11:21:22 uur
			</td>
</tr>
<tr><td>Moraal:</td><td><b>45%</b></td></tr><tr><td colspan="2"><span class="icon header ressources" title="Draagcapaciteit"></span>0</td></tr></tbody></table><br>
	<table class="vis"><tbody><tr>
	<th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_spear.png?1" title="Speervechter" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_sword.png?1" title="Zwaardvechter" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_axe.png?1" title="Bijlstrijder" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_spy.png?1" title="Verkenner" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_light.png?1" title="Lichte cavalerie" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_heavy.png?1" title="Zware cavalerie" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_ram.png?1" title="Ram" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_catapult.png?1" title="Katapult" alt="" class=""></th><th width="50"><img src="http://cdn.tribalwars.net/graphic/unit/unit_snob.png?1" title="Edelman" alt="" class=""></th>
		</tr>
	<tr>
	<td class="unit-item hidden">0</td><td class="unit-item hidden">0</td><td class="unit-item hidden">0</td><td class="unit-item">5</td><td class="unit-item hidden">0</td><td class="unit-item hidden">0</td><td class="unit-item hidden">0</td><td class="unit-item hidden">0</td><td class="unit-item hidden">0</td>
		</tr>
	</tbody></table>
<br>
<input type="hidden" name="spear" value="0">
<input type="hidden" name="sword" value="0">
<input type="hidden" name="axe" value="0">
<input type="hidden" name="spy" value="5">
<input type="hidden" name="light" value="0">
<input type="hidden" name="heavy" value="0">
<input type="hidden" name="ram" value="0">
<input type="hidden" name="catapult" value="0">
<input type="hidden" name="snob" value="0">
<script type="text/javascript">
//<![CDATA[
	$(document).ready(function() {
		$('#troop_confirm_go').focus();
	});
//]]>
</script>
<input id="troop_confirm_go" name="submit" type="submit" onload="this.disabled=false;" value="OK" style="font-size: 10pt;">
</form>
	                                </td>
 
Ik zie dan ook geen ID als target_attack.

Bedoel je niet: troop_confirm_go
 
ik weet ook niet hoe ik daar bij ben gekomen maar nu krijg ik bij wb.Document.GetElementById("troop_confirm_go").InvokeMember("click") de error
NullReferenceException was unhandled
Object reference not set to an instance of an object.
 
En als je nu wel "submit" probeert?? Werkt het dan wel?
 
:D het blijk dat :
Code:
wb.Document.GetElementById("troop_confirm_go").InvokeMember("click")
wel werkt alleen denk ik dat de webbrowser nog niet was geladen.

ik gebruikte om ervoor te zorgen dat ie pas door gaat als die is geladen dit:
Code:
Do Until wb.ReadyState = WebBrowserReadyState.Complete
            Application.DoEvents()
        Loop
maar dit blijkt dus niet te werken, weten jullie misschien een andere oplossing?
 
Waarom moet het eigenlijk zo? De form gebruikt een POST, en geen GET. Kort gezegd: Je kan gewoon naar de goede (ingevulde) URL gaan.

Als je niet weet hoe je de goede URL kan vinden, post hier de site dan even, dan zoek ik dat even voor je op.


Succes! MartinJM:thumb:
 
bedankt martin maar bijn mijn 2de post zie je een deel van de source, is dat genoeg?
 
Ik kan het ermee proberen, maar de kans dat dat dan fout gaat is groter. Ook de tijd die dat dan inneemt is groter. Daarvoor heb ik nu niet echt genoeg tijd....
Ik zal er een andere keer nog even naar kijken...

MartinJM

*EDIT*
Toch wel even tijd :)
 
Laatst bewerkt:
Het zou ongeveer zoiets moeten zijn:
Code:
/game.php?village=4833&amp;screen=place&amp;action=command&amp;h=c751&attack=true&ch=ce374b62de983b5eb9b2dd613b26c9bd11a65c8c&x=451&y=567&action_id=790190&spear=0&sword=0&axe=0&spy=5&light=0&heavy=0&ram=0&catapult=0&snob=0&submit=OK

Maar let hier wel op: Het zou niet kunnen werken omdat er in de site ook nog wat javascript gebruikt wordt. Dus eerst (voorzichtig) proberen. Ook moet je nog wel de goede waarden erin zetten.

Succes!


*EDIT*
Het zou kunnen dat ik iets heb gemist, het is namelijk niet de mooiste code.....
 
werkt niet volgens mij hebben ze dat gepatcht, want er komt dat je geen externe url's mag invoeren of zo.
 
Ok, probeer dit dan eens:

Code:
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

    End Sub

De code in de sub zou dan dit moeten zijn:
Code:
wb.Document.GetElementById("troop_confirm_go").InvokeMember("click")

Als ik het goed heb begrepen en het werkt:p

MartinJM
 
ik denk dat het wel gaat werken maar als ik de sub wil oproepen dan moet ik toch
WebBrowser1_DocumentCompleted() typen?
maar dan moet ik ook nog een "sender As System.Object" en een "e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs" anders geeft ie een error
maar wat ik daarvoor invullen tussen de () ?
 
Dit stukje " Handles WebBrowser1.DocumentCompleted", aan het eind van de eerste regel, betekend dat deze sub uitgevoerd zal worden zodra de webbrowser klaar is met het laden van een pagina.

LET OP: Deze sub zal dan worden aangeroepen na het laden van iedere pagina. Je zal dus eerst moeten checken of je op de goede pagina zit.


Dus: Je hoeft deze sub verder zelf niet aan te roepen, dat 'doet' de webbrowser voor jou.


Succes! MartinJM
 
oo dat is jammer want ik wil niet dat ie steeds hetzelfde doet als ie klaar is met laden.
want hij moet een maar keer laden maar dan doet ie hetzelfde steeds dus dat is jammer, nou ik zoek wel nog iets uit maar hulp is altijd handig!
bedankt martin.
 
Je bedoelt dat die code alleen moet worden uitgevoerd bij die ene site??
Dat kan je dan toch controleren met een "if-else-end if" statement??


Of bedoel je iets anders?

MartinJM
 
ik heb het handmatig ook al geprobeerts vanaf die website, al ingelogd en alles
maar werkt ook niet.
je hebt het toch over: /game.php?village=4833&amp;screen=place&amp;action=command&amp;h=c751&attack=true&ch=ce374b62de983b5eb9b2dd613b26c9bd11a65c8c&x=451&y=567&action_id=790190&spear=0&sword=0&axe=0&spy=5&light=0&heavy=0&ram=0&catapult=0&snob=0&submit=OK ??
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan