2016-09-28 152 views
0

我正在使用Selenium(ChromeDriver)自動執行chess site,但我無法單擊某個部分並移動它。我試過click()ActionChains,但沒有任何工作。這裏是我的代碼:Selenium click trouble(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

@不允許我在最後一行之前加上'time'並且它工作。 –

回答

0

這有些複雜。棋子是可以點擊的IMG,但空棋子不是由元素表示的。您將必須確定一個座標系,並使用move_to_element_with_offset(to_element, xoffset, yoffset),以<div id="chessboard_boardarea" ...>代表的電路板以及電路板標籤A-H和1-8爲基礎。對於move_to_element_with_offset(),偏移量相對於元素的左上角。所以在這種情況下,(0,0)是棋盤的左上角。

下面的代碼應該點擊A2上的白色棋子,然後點擊A3來移動它。該板是640px x 640px。每個廣場是80px。該代碼是在廣場這樣的中間點擊:

  • A8將是40,40
  • A1是40600
  • 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,是黑色騎士。每個圖像文件名將是兩個字母。第一個字母是黑色的'b'或白色的'w'。第二個字母是片名,'p'pawn,'r'rook,'n'knight,'b'bishop,'q'女王和'k'國王。所以,bn.png對於黑色來說是'b'而騎士是'n'......黑色騎士。

您可以使用表示不同部分的IMG標籤的樣式屬性的transform: translate(160px, 160px);部分確定零件的位置。例如,transform: translate(160px, 160px);這個元素是160,160,它是C6(座標是正方形的左上角,每個正方形是80px)。

+0

其作品,但A2平方座標爲(0,480)。與其平移相同。 –

+0

點擊A3.why Piece不動,但保持在同一位置。 –

+0

A2的平移座標是(0,480),但是這是廣場的左上角。我會建議點擊廣場的中心,以確保你得到正確的廣場。 – JeffC

0

Selenium Webdriver不是正確的工具。

如果您正在尋找免費工具,您可以試試Genie automation tool。我在Genie上試過我的手,這有點複雜,但最終它解決了你的問題。

+0

硒工作得很好。爲什麼在這種情況下精靈更好? – JeffC

+0

使用基於座標的點擊會稍後導致屏幕/分辨率更改失敗。精靈會爲你生成每個元素的ID。 –

+0

空心方格上沒有元素。 – JeffC