Selenium点击麻烦(Python)

时间:2016-09-28 21:09:00

标签: python selenium selenium-webdriver

我正在使用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。

2 个答案:

答案 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。代码点击了正方形的中间,所以:

  • A8将是40,40
  • A1为40,600
  • H8是600,40
  • H1为600,600

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了,它有点复杂,但最后它解决了你的问题。