2048获得python selenium

时间:2015-08-28 14:17:13

标签: python python-3.x selenium selenium-webdriver

我正在尝试创建一个可以玩2048游戏的AI。我的问题是我无法以我想要的格式获得电路板。

我的代码(获得董事会):

def get_board():
    board = {"1": '-',"2": '-', "3": '-',"4": '-',
            "5": '-',"6": '-', "7": '-',"8": '-',
            "9": '-',"10": '-', "11": '-',"12": '-',
            "13": '-',"14": '-', "15": '-',"16": '-'}
    tiles = driver.find_elements_by_class_name("tile")
    for tl in tiles:
        til = tl.get_attribute("class")       
        tile = til.split()
        if "tile-position-1-1" in tile:
            value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[1]/div")
            board["1"] = value
        elif "tile-position-2-1" in tile:
            value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[2]/div")
            board["2"] = value
        elif "tile-position-3-1" in tile:
            value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[2]/div")
            board["3"] = value
        return board

我希望它将瓷砖放在字典的正确位置,例如: 如果磁贴1-1为4则应该board['1'] = "4"

我有什么想法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我不知道Python,但这是Java,所以希望你能翻译它。

我将电路板放入int格式的二维数组board[1][2] = 16,其中该图块上的类为tile tile-16 tile-position-1-2 tile-new。我知道这不是你要求的,但你没有详细说明你如何存储各种职位......

List<WebElement> tiles = driver.findElements(By.cssSelector("div.tile"));
int[][] board = new int[5][5]; // need 5 instead of 4 because we are going to use indices 1-4 and not 0-3
for (WebElement tile : tiles)
{
    String className = tile.getAttribute("className");
    String regex = "tile tile-(\\d*) tile-position-(\\d)-(\\d) tile-new";
    Matcher matcher = Pattern.compile(regex).matcher(className);
    matcher.matches();
    int x = Integer.parseInt(matcher.group(2));
    int y = Integer.parseInt(matcher.group(3));
    int value = Integer.parseInt(matcher.group(1));
    board[x][y] = value;
}

代码使用类tile获取DIV,因为此处定义了具有任何值的所有tile。 (董事会的HTML有点奇怪的IMO,但我不是网页设计师...所以也许只是我)。然后循环遍历所有tile并获取className,其中存储了所有位置和值数据。它使用正则表达式来设置className,然后将值分配给数组board中的正确位置。

如果您转储board的值,您将获得类似

的内容
0000
0020
0000
0020

希望这有帮助。