7
votes

QT: Force Qwebview à cliquer sur un élément Web, même l'un n'est pas visible sur la fenêtre.

Alors disons que j'essaie de cliquer sur un lien dans le QWebView, voici ce que j'ai: xxx pré>

et vous l'appelez comme suit: p>

myWebView->click("a[href]");  // will click first link on page
myWebView->click("input[type=submit]"); // submits a form


0 commentaires

3 Réponses :


7
votes

Je pense que appeler el.evaluatjavascript ("Cliquez sur ()"); devrait fonctionner. Je dis devrait fonctionner car dans le passé, j'utilise qwebelement :: fonction () avec "cliquez sur" argument avec succès. Cette méthode ne faisait pas partie de l'API Qwebelement. Je pense que les auteurs sont venus en conclusion qu'il était superflu en présence de Qwebelement :: EvaluatejavaScript () .

Ma question similaire - Comment suivre un lien dans QWebKit? - toujours sans réponse :(
J'ai trouvé la même solution de contournement comme vous ici -
Problème avec EvaluatejavaScript ()


0 commentaires

1
votes

Pour ceux qui veulent cliquer sur le bouton WebView, corrigez-les

frame1->evaluateJavaScript( "document.forms[0].submit();" ); 


1 commentaires

Ok répondre, peut être une explication?



7
votes

Bonjour, je sais que cette question est assez ancienne, mais je voulais offrir une réponse différente. Vous avez dit: "... puisque l'élément ne s'affiche pas à l'écran, il ne peut pas faire le calcul pour cliquer dessus ...". Eh bien, " il " ne peut pas faire les mathématiques, mais " vous " peut. ;) Vous pouvez obtenir la position de l'élément que vous souhaitez cliquer sur et calculer le nombre de pixels ( x ) dont vous avez besoin pour défiler vers le bas / vers le bas afin de le rendre visible. Ensuite, vous pouvez faire défiler automatiquement la page par x pixels et utilisez la valeur x pour calculer la position actuelle de l'élément et cliquez sur là. La même logique est utilisée si vous devez faire défiler la gauche ou la droite. Il suffit d'utiliser des pixels y comme une valeur de correction horizontale. Je l'ai fait dans une autre langue et je sais que c'est faisable et travaille bien. :)

EDIT: (21 février 2013)

OK, je devais le faire aussi pour l'un de mes projets. Donc, pour illustrer ce que je voulais dire au-dessus, ci-dessous est le code QT. Je me rends compte que cela a des défauts, surtout si vous traitez de petits éléments autour des bords de la page, mais dans la plupart des cas, cela fonctionne bien.

(dans le code ci-dessous * elemt est l'élément que vous souhaitez cliquer sur et * Web est le widget QWebView) xxx

C'est ce qui fonctionne pour moi, lorsque le clic Java échoue . J'espère que cela sera utile à quelqu'un d'autre aussi.


1 commentaires

Impressionnant! Pour ceux qui gèrent leur QwebPage sur l'arrière-plan (et ils n'ont donc pas de qwebview), en utilisant webpage.currentframe () -> documentation (). Géométrie () pour obtenir le web -> Largeur () et Web-> Hauteur () fonctionnera également!