为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森卡 2021-05-30 02:42:09
我有一个问题,这里以某种方式讨论过([python][selenium] 元素的屏幕位置),但目前并没有实现我想要实现的目标。我的目标如下: element.location 给出了浏览器中元素左上角的位置。我有一个网站,即使它可能不是一个很好的 selenium 实践,我也希望能够纯粹根据它的位置点击这样的元素,因为它从未改变过,而且可能永远不会改变。假设 element.location 给出 {'x': 253, 'y': 584},这是我到目前为止尝试的代码,但没有运气from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver.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 brosweraction = 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()运行此代码时没有任何反应。我只想打开一个新窗口。有人可以帮忙吗?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

这是一个基于(单击坐标而不识别元素)上可用的最后一个答案的解决方案,我必须调整该答案,因为它在我在原始代码中发布的网站上不起作用:


# 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 = 253

y = 310


actions = 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 的原因。


查看完整回答
反对 回复 2021-06-01
?
动漫人物

TA贡献1815条经验 获得超10个赞

这是一个基于(单击坐标而不识别元素)上可用的最后一个答案的解决方案,我必须调整该答案,因为它在我在原始代码中发布的网站上不起作用:


# 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 = 253

y = 310


actions = 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 的原因。


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 523 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信