0

カーソルをWeb要素(シミュレートしない)に物理的に移動し、シフトキーを押しながらオフセットで別の要素をクリックしたいとします。私はpyautoguiを使用して、保留シフトキーと第二の要素をクリックするを持っているPythonでカーソルを物理的にWeb要素に移動

import pyautogui 

pyautogui.keyDown('shift') 
pyautogui.moveRel(0, 62) 
pyautogui.click() 
pyautogui.keyUp('shift') 

私の問題は、上記のコードを実行し、そのオリジナルのウェブ要素に物理的にマウスを動かしています。 Pyautoguiは、絶対x、yコーディネータに移動するオプションを提供しますが、Web要素の絶対位置が変更されるため、私の場合は機能しません。

どうすればいいですか?好ましくはpython(pyautogui、selenium、etc)?

ブラウザはクロームで、OSはOS Xの

+0

クリックをシミュレートできないのはなぜですか? Shiftキーを押しながらリンクを新しいウィンドウで開くと、何をしようとしていますか? –

+0

私は新しいウィンドウを開こうとしていません。一部のデバイスを一覧表示する表がWebページにあります。列の1つはデバイスIDです(例:1234)。列内に互いに同じIDを持つデバイスがある場合があります。例えば。 DeviceID列が1234に設定された3行があります。同じDeviceIDを持つエントリを選択したいとします。手動で、最初の1234をクリックし、Shiftキーを押しながら3番目の1234をクリックします。問題は、デバイスID番号(1234)を特定してクリックをシミュレートすると、最初の1234が常に選択されることです。私が達成しようとしていることを明確にしたいと思っています。 – rocketfinger

+0

[This]:(http://imgur.com/FsW6rOB)は、項目1を選択した表です。 [リンク]:(http://imgur.com/aGsCs9T)は、すべてのアイテムが選択されている場所です。 – rocketfinger

答えて

0

あなたは、このためのセレンアクションを使用することができます

(私は残念ながら、この1とセレンのために話すことができる)、すなわち

(サンプルは、C#である)であります
new Actions(driver) 
    .MoveToElement(element1) 
    .KeyDown(Keys.Shift) 
    .MoveByOffset(offset) 
    .Click(element2) 
    .KeyUp(Keys.Shift) 
    .Perform(); 

は、Javaを使用している場合は、物事のこれらの種類のロボットのいくつかのコンセプトは(私が読んだから)もあり、つまり、このスレッドを参照してくださいhttps://stackoverflow.com/a/12978079/3110529

+1

残念なことにセレンの行動もそれを "シミュレート"します。彼らはOPが求めていることをしません。 Robotクラスを見ると、Javaの一部です。awtパッケージなので、それはおそらくローカルの実行のためだけに動作し、リモートのJVMではなくそれへのアクセスではありません) – Todor

+0

@Todorこれはまったく逸話であり、まったく同じではないかもしれませんが、他の要素の上にカーソルを移動するとメニューが表示されます。 これは ''新しいアクション(ドライバ).MoveToElement(ウィジェット).Build()。Perform(); ' これにより、ホバーメニューが開き、その中のオプションにアクセスできます。 – Dillanm

+0

私はそれが行動を誘発しないと言っているのではなく、反対に、私はまた、それをうまくホバーに使用します。私が言っているのは、物理的にカーソルを動かさないということです。これはOPが求めていたものです。私は自分自身を助ける方法を知らない、この質問のための私の活動はコメントにのみあります:) – Todor

0

ImageHorizonLibraryからEficodeまではあなたに役立つかもしれません。ライブラリはLinuxとWindowsで動作し、マウスを動かします。

以下は、2ステップのマウス移動のスクリプト例です。ライブラリには、次の論理的な手順のように、多くのクリックオプションKeywordsもあります。

*** Settings *** 
Library ImageHorizonLibrary 

*** Test Cases *** 

Mouse Test 
    Sleep 2Sec 
    Move To 345  345 
    Sleep 2Sec 
    Move To 1800 720 
0

PyAutoGUIを引き続き使用したい場合は、画像認識機能の使用をお勧めします。 Webページの要素のスクリーンショットを撮り、スクリーンショットを要素だけにトリミングします(MSペイントまたはオンラインクロップツールを使用して)。

次に実行します。

>>> x, y = pyautogui.locateCenterOnScreen('croppedscreenshot.png') 
>>> pyautogui.moveTo(x, y) 
>>> pyautogui.keyDown('shift') 
>>> pyautogui.click(x, y) 
>>> pyautogui.keyUp('shift') 

これは、もちろん、脆弱でエラーが発生しやすいです。これは、画面上に表示されている要素に依存しており、スクリーンショットとは異なるブラウザを使用している場合は機能しない可能性があります。

セレンなどのツールを使用する方がはるかに良いアイデアです。

+0

実際に画像認識機能を調べましたが、画像が見つかりませんでした。x、y = pyautogui.locateCenterOnScreen( 'test.png') TypeError: 'NoneType'オブジェクトは反復不可能です – rocketfinger

関連する問題