Вы были очень близки!
Чтобы преобразовать строку в int, вы просто делаете int(string)
Есть много способов удалить часть px
, я просто split
около px
и взял первый элемент в возвращенном массиве - он получит все, что находится слева от px
. Краткая версия выглядит так:
return = element.text.split('px')[0]
Выбор случайной точки внутри элемента не требуется для победы в игре. Когда вы делаете щелчок или что-то подобное, он все равно выбирает центр объекта. Если вы действительно хотите, чтобы это была случайная начальная точка, вы можете попробовать actions.move_to_element_with_offset
с некоторыми случайными числами, но это усложняет учет. (Дайте мне знать, действительно ли вам нужно, чтобы это была случайная начальная точка)
Также полезно знать, что вам не нужно устанавливать неявное ожидание для каждого действия - вы просто делаете это один раз. driver.implicitly_wait(10)
настраивает объект драйвера на динамическое ожидание x секунд перед выдачей ошибки. Каждый вызов, который использует driver
после этого, настроен.
Это объединенный окончательный код с тем, как мне нравится сгруппировать вещи: (обратите внимание, что я также не получил объект mobi-close - так что повторно добавьте эту строку, если вам нужно)
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
PATH = "H:/python/venv/chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.pixact.ly/")
driver.implicitly_wait(10)
#driver.find_element_by_id("mobi-close").click() # i don't get this
driver.find_element_by_id("enter").click()
#get the elements
width = driver.find_element_by_xpath("//p[contains(text(),'Width')]/span").text.split('px')[0]
height = driver.find_element_by_xpath("//p[contains(text(),'Height')]/span").text.split('px')[0]
canvas = driver.find_element_by_id("canvas")
#run the actions
action = ActionChains(driver)
action.drag_and_drop_by_offset(canvas, width, height).perform()
(Я также обновил ваши идентификаторы xpath, чтобы они были немного более логичными, надеюсь, что все в порядке.)
С этим, вы получите улыбающегося мага c единорога успеха:

[update - even though no one asked]
I enjoyed it enough to figure out how to do the offset. My laptop is old and the resolution isn't great so i couldn't do the final round (the >200px ranges) without causing errors for it going out of screen range
So this is the alternative to start from the top left to give adequate drawing space:
action = ActionChains(driver)
#action.drag_and_drop_by_offset(canvas, width, height).perform() # old line
action.move_to_element_with_offset(canvas, 10, 10).click_and_hold().pause(1).move_by_offset(width,height).release().perform()
Вставьте это в oop, и вы сможете получать 0 каждый раз : нулевой балл