2016-09-28 3 views
0

chess siteを自動化するためにSelenium(ChromeDriver)を使用していますが、ピースをクリックして移動する際に問題があります。私はclick()ActionChainsを試しましたが、何も動いていません。ここに私のコードは次のとおりです。セレンクリック問題(Python)

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

T = r"C:\Users\HP\Downloads\chromedriver.exe" 
options = webdriver.ChromeOptions() 
options.add_argument("--start-maximized") 
Driver = webdriver.Chrome(T, chrome_options=options) 
Driver.get("https://www.chess.com/play/computer") 
Driver.find_element_by_xpath('//*[@id="boardMessage"]/a').click() 
Piece = WebDriverWait(Driver,10).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="chessboard_boardarea"]/img[22]'))) 
Piece.click() 

私は何も起こらないスクリプトが、白のポーンが黄色で強調表示されます実行する場合。誰かがなぜ.click()またはActionChainsが機能していないのか説明できますか?どうすればそれを動作させることができますか?

P.S.ソリューションにJavaScriptのヘルプが必要な場合は、JavaScriptがまったく分かりませんので、より詳しく記述してください。

+0

あなたのコードはよかったです。あなたはクリックの前に小さな遅延を加えてみることができますか? '輸入時間。最後の行の前に 'time.sleep(1)'を書きます。 – Amit

+0

@A最後の行の前に 'time'を追加して動作させます。 –

答えて

0

これはやや複雑です。チェスの部分はIMGですが、クリックすることはできますが、空のチェスの四角は要素で表されません。座標系を決定し、<div id="chessboard_boardarea" ...>とボードラベルA-Hと1-8で表されるボードに基づいてmove_to_element_with_offset(to_element, xoffset, yoffset)を使用する必要があります。 move_to_element_with_offset()の場合、オフセットは要素の左上隅を基準にしています。この場合、(0,0)はチェス盤の左上隅です。

次のコードは、A2の白いポーンをクリックし、A3をクリックすると移動します。ボードは640px x 640pxです。各正方形は80ピクセルです。コードは非常に正方形の中央にクリックされる:

  • A8は40,40
  • A1は40,600
  • H8であろうこと600,40
  • H1がある600600

board = Driver.find_element_by_id("chessboard_boardarea") 
action_chains = ActionChains(Driver) 
action_chains.move_to_element_with_offset(board, 40, 520).click().perform() # A2 
action_chains.move_to_element_with_offset(board, 40, 440).click().perform() # A3 

要素で表される部分(IMGタグ)を、src属性のファイル名を参照して確認します。たとえば、src="//images.chesscomfiles.com/chess-themes/pieces/neo/80/bn.png"はファイル名がbn.pngで黒い騎士です。各画像ファイル名は2文字になります。最初の文字は、黒の場合は「b」、白の場合は「w」のピースカラーです。 2番目の文字はピース名、 'p' pawn、 'r' rook、n 'night'、 'b' bishop、 'q' queen、 'k' kingです。だから、bn.pngは黒で 'b'、騎士では 'n' ...黒の騎士。

transform: translate(160px, 160px);の部分を表すIMGタグのstyle属性の部分を使用して、部分がどこにあるかを判断できます。たとえば、transform: translate(160px, 160px);この要素は160,160であり、これはC6です(座標は正​​方形の左上で、各正方形は80ピクセルです)。

+0

その作品ですが、A2の正方形の座標は(0,480)です。それはその翻訳と同じです。 –

+0

何かが間違っていて、A3をクリックしても何も起こりません。ピースは動かず同じ位置に留まります。 –

+0

A2の翻訳座標は(0,480)ですが、それは正方形の左上隅です。正方形の中心をクリックして、正しい正方形を得ることをお勧めします。 – JeffC

0

Selenium Webdriverは適切なツールではありません。

フリーツールをお探しの場合は、Genie automation toolをお試しください。私はGenieに手をかけましたが、ちょっと複雑ですが、最終的にはあなたの問題を解決します。

+0

セレンはうまく動作します。この場合、Genieはなぜより優れていますか? – JeffC

+0

座標ベースのクリックを使用すると、後で画面/解像度の変更に失敗します。 Genieはそれらの要素ごとにIDを生成します。 –

+0

開いている四角に要素がありません。 – JeffC