类似于上述here.
的问题我想让鼠标沿着我定义的曲线从a点到b点。因此,我需要a和b的位置坐标。点a是鼠标的当前位置,点b是我可以定位的元素。我可以使用以下命令找到元素的位置:
element = driver.find_element_by_class_name("insertnamehere")
x, y = element.location["x"], element.location["y"]
不幸的是,我无法使用类似的Selenium方法来找到鼠标的当前位置(据我所知)。所以我必须找到这样的鼠标:
import pyautogui
x_mouse, y_mouse = pyautogui.position()
Pyautogui给出屏幕位置,正如上面链接的问题所述,它不是element.location给出的内容。但是在我感兴趣的站点上,链接的解决方案不适用于我。也就是说,我没有匹配的坐标。该网站是this one。
我怀疑这是因为Selenium的定位器没有将map元素计为网页的一部分,而是返回相对于列表(您可以滚动的部分)的坐标。所以,这是我尝试过的一些想法:
这很困难,因为我认为公式(Selenium的屏幕)将取决于我的显示器,因此通常无法正常工作。
可能是最好的解决方案,但我将不得不使用ActionChains(driver).move_to_element()移至该元素,这违背了定义a-> b鼠标路径的目的。
我尝试了pyautogui的locateOnScreen()。似乎很有希望,我可能会这样做。
答案 0 :(得分:0)
如果您要获取x和y的绝对值(相对于屏幕的x和y值),请使用以下逻辑。
# maximize the browser window so that you can get the absolute x and y based on the window inner and outer heights
driver.maximize_window()
# navigate to OP
driver.get("https://stackoverflow.com/questions/56688961/locating-elements-screen-position-in-selenium-using-python")
# get ask question element
askQuestion = driver.find_element_by_link_text("Ask Question")
# get the browser panel height
panel_height = driver.execute_script('return window.outerHeight - window.innerHeight;')
# get absolute x value
abs_x = askQuestion.location['x']
# get y value (this is relative y value - meaning y value with in browser)
y = askQuestion.location['y']
abs_y = y + panel_height
# print the absolute x and y values
print ("Absolute x : " + abs_x)
print ("Absolute y : " + abs_y)