Python Selenium - 基于身体元素偏移量纯粹根据其位置单击元素

我有一个问题,这里以某种方式讨论过([python][selenium] 元素的屏幕位置),但目前并没有实现我想要实现的目标。


我的目标如下: element.location 给出了浏览器中元素左上角的位置。我有一个网站,即使它可能不是一个很好的 selenium 实践,我也希望能够纯粹根据它的位置点击这样的元素,因为它从未改变过,而且可能永远不会改变。假设 element.location 给出 {'x': 253, 'y': 584},这是我到目前为止尝试的代码,但没有运气


from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

driver.maximize_window()

url = "https://learn.letskodeit.com/p/practice"

driver.get(url)

open_window_elem = driver.find_element_by_id("openwindow")


# from wherever the mouse is, I move to the top left corner of the broswer

action = ActionChains(driver)

action.move_by_offset(-1000, -1000)    

action.click()

action.perform()


y_coordinate = open_window_elem.location["y"]

x_coordinate = open_window_elem.location["x"]


action = ActionChains(driver)

action.move_by_offset(x_coordinate, y_coordinate)

action.click()

action.perform()

运行此代码时没有任何反应。我只想打开一个新窗口。有人可以帮忙吗?


慕森卡
浏览 524回答 3
3回答

湖上湖

这是一个基于(单击坐标而不识别元素)上可用的最后一个答案的解决方案,我必须调整该答案,因为它在我在原始代码中发布的网站上不起作用:# WORKING EXAMPLE 3# assumptions is I know what coordinate I want to use# in this example we use x = 253, y = 584# remember: y = 584 -> it will move down  (a negative value moves up)zero_elem = driver.find_element_by_tag_name('body')x_body_offset = zero_elem.location["x"]y_body_offset = zero_elem.location["y"]print("Body coordinates: {}, {}".format(x_body_offset, y_body_offset))x = 253y = 310actions = ActionChains(driver)actions.move_to_element_with_offset(driver.find_element_by_tag_name('body'), -x_body_offset, -y_body_offset).click()actions.move_by_offset( x, y ).click().perform()基本上,身体坐标不一定是 0,0,这就是我必须使用 x_body_offset 和 y_body_offset 的原因。

动漫人物

这是一个基于(单击坐标而不识别元素)上可用的最后一个答案的解决方案,我必须调整该答案,因为它在我在原始代码中发布的网站上不起作用:# WORKING EXAMPLE 3# assumptions is I know what coordinate I want to use# in this example we use x = 253, y = 584# remember: y = 584 -> it will move down  (a negative value moves up)zero_elem = driver.find_element_by_tag_name('body')x_body_offset = zero_elem.location["x"]y_body_offset = zero_elem.location["y"]print("Body coordinates: {}, {}".format(x_body_offset, y_body_offset))x = 253y = 310actions = ActionChains(driver)actions.move_to_element_with_offset(driver.find_element_by_tag_name('body'), -x_body_offset, -y_body_offset).click()actions.move_by_offset( x, y ).click().perform()基本上,身体坐标不一定是 0,0,这就是我必须使用 x_body_offset 和 y_body_offset 的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python