我正在使用Selenium(ChromeDriver
)来自动chess site,但我无法点击某个部分并移动它。我尝试了click()
和ActionChains
,但没有任何效果。这是我的代码:
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 :(得分: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。每个方格是80px。代码点击了正方形的中间,所以:
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
,是黑骑士。每个图像文件名都是两个字母。第一个字母是片段颜色,它是&#39; b&#39;对于黑人或&#39; w&#39;为白色。第二个字母是片名,&#39; p&#39;典当,&#39; r&#39;车,&#39; n&#39;骑士,&#39; b&#39;主教,&#39; q&#39;女王,&#39; k&#39;王。因此,bn.png
是&#39; b&#39;对于黑人和&#39; n&#39;对于骑士......黑骑士。
您可以使用代表不同部分的transform: translate(160px, 160px);
标记的样式属性的IMG
部分来确定部分的位置。例如,transform: translate(160px, 160px);
此元素为160,160,即C6(坐标为左上角,每个正方形为80px)。
答案 1 :(得分:0)
Selenium Webdriver不适合它。
如果您正在寻找免费工具,可以尝试Genie automation tool。我已经尝试过Genie了,它有点复杂,但最后它解决了你的问题。