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?
Czemu nie użyjesz do tego Selenium?
Selenium będzie obsługiwała elementy wykonane we flashu?
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.
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ęć.
A te sprawdzane warunki to mają być informacje dostarczane przez tę aplikację we flashu czy jakieś dane na twoim dysku?
Wszystko z aplikacji która działa w przegladarce
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.
Dobrze się domyślasz. Tyle że Autohotkey to tak średnio wiem jak działa i jak dodać tego color pickera Jakiś poradniczek czy coś?
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ę.
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.
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);
}