Program do klikania w przeglądarce z warunkami

0

Witam mam pytanko. Książka C++ dla każdego wydanie II autorstwa Jesse Liberty, Siddhartha Rao i Bradley L. Jones wystarczy do napisania programy który będzie klikał myszką w przeglądarce w odpowiednie miejsca wyszukując je, sprawdzając uprzednio niektóre warunki? Jeżeli nie mógł by ktoś poratować poradnikiem do pisania kodów do automatycznej obsługi myszy itp?

1

Czemu nie użyjesz do tego Selenium?

0

Selenium będzie obsługiwała elementy wykonane we flashu?

0

Nie, ale w takim wypadku to w ogóle cieżko będzie to zrobić. Klikanie w miejsce na ekranie jest proste, ale zgaduje ze chcesz jakoś analizować na co wskazuje kursor, a to juz nie takie proste.

0

Spróbowałem to zrobić i elementy normalnie wykonane czyli na normalnej stronie http działają normalnie. Jednak w aplikacji we flashu nie rejestruje nawet kliknięć.

0

A te sprawdzane warunki to mają być informacje dostarczane przez tę aplikację we flashu czy jakieś dane na twoim dysku?

0

Wszystko z aplikacji która działa w przegladarce

0

Zgaduję, że chcesz zrobić jakiegoś bota do grania w gierkę on-line. Wydaje mi się, że łatwiej byłoby zrobić jakiś kombajn: skrypt w AutoHotkey + jakiś Color Picker. No chyba, że potrzebujesz analizy napisów, ale do tego może też by były jakieś gotowce.

0

Dobrze się domyślasz. Tyle że Autohotkey to tak średnio wiem jak działa i jak dodać tego color pickera Jakiś poradniczek czy coś?

0

Zakładając, że do podjęcia decyzji wystarczy ci wiedza o kolorze jakiegoś pola:

  • odpal grę, color picker, AutoHotKey,
  • w AHK napisz sekwencję pobierającą za pomocą Color Pickera do schowka kolor wybranego punktu,
  • wydobądź tę informację ze schowka: https://autohotkey.com/docs/misc/Clipboard.htm
  • W AHK napisz instrukcje warunkowe klikające gdzieś tam zależnie do wartości pobranego koloru,
  • jeśli potrzebujesz zawiń to w jakąś cykliczną pętlę.
0

Witajcie,
Kiedyś się bawiłem autohotkey a teraz nie wiem jak odpalić skrypt, który uruchomi stronę X, wypełni formularz, kliknie tu i tam i zrobi zaś to ponownie.
Ma ktoś jakiś poradnik? albo ktoś podpowie za kilka zł?
Dzięki.

1

Można np. pobierać rgb koloru "pixela" na który wskazuje wskaźnik myszy i na tej podstawie przesuwać wskaźnik o określone x, y. Jeżeli wiesz jak wygląda strona możesz to zrobić na sztywno metodą prób i błędów.

Testuj na żywym przykładzie.
Źródło: Google

#include <X11/Xlib.h>
#include<stdio.h>
#include<unistd.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>
#include <X11/Xutil.h>
#include <string.h>

void mouseClick(int button);
void GetPix(Display *d, int x, int y, XColor *color);

int main() {
    int x = 50, y = 30;
    XColor c;
    Display *display = XOpenDisplay(0);
    Window root = DefaultRootWindow(display);

    XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
    XFlush(display);
    sleep(1);
    GetPix(display, x, y, &c );
    printf("%d.%d.%d", c.red, c.green, c.blue);
    mouseClick(Button1);
    
    KeySym sym_a = XStringToKeysym("A");
    KeyCode keycode = XKeysymToKeycode(display, sym_a);
    XTestFakeKeyEvent(display, keycode, 1, 0);
    XTestFakeKeyEvent(display, keycode, 0, 0);

    XCloseDisplay(display);
}

void mouseClick(int button)
{
	Display *display = XOpenDisplay(NULL);

	XEvent event;
	
	if(display == NULL)
	{
		exit(EXIT_FAILURE);
	}
	
	memset(&event, 0x00, sizeof(event));
	
	event.type = ButtonPress;
	event.xbutton.button = button;
	event.xbutton.same_screen = True;
	
	XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
	
	event.xbutton.subwindow = event.xbutton.window;
	
	while(event.xbutton.subwindow)
	{
		event.xbutton.window = event.xbutton.subwindow;
		
		XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
	}
	
	if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error\n");
	
	XFlush(display);
	
	usleep(100000);
	
	event.type = ButtonRelease;
	event.xbutton.state = 0x100;
	
	if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Error\n");
	
	XFlush(display);
	
	XCloseDisplay(display);
}

void GetPix(Display *d, int x, int y, XColor *color)
{
  XImage *image;
  image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes, XYPixmap);
  color->pixel = XGetPixel(image, 0, 0);
  XFree (image);
  XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), color);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1