如何在iframe中获取光标位置的元素



我试图使用下面的代码来获取位于光标位置的元素,但该元素在iframe中。我以为下面的代码应该在光标的位置获得最深的子元素,但它似乎什么都没做。我做错了什么?

当页面加载时,我试图点击";将所有东西中的一个添加到我的购物车中";按钮

from selenium import webdriver
from tkinter import *
from pynput import mouse
from pynput.mouse import Listener
def CheckRightClick(x, y, button, pressed):
if button == mouse.Button.right:
if pressed:
click_window.event_generate("<<quit>>")
print('Getting element')
element_at_cursor_script = 'return document.elementFromPoint(' + str(x) + ',' + str(y) + ');'
element = driver.execute_script(element_at_cursor_script)
print('Element at cursor is ', element)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options, executable_path=r'C:UsersDavidDesktopPythonchromedriver_win32'
r'chromedriver.exe')
url = 'http://store.cardsagainsthumanity.com/'
driver.get(url)
click_window = Tk()
click_prompt = Label(click_window, text='Right click somewhere')
click_prompt.grid(row=0, column=0)
click_window.bind("<<quit>>", lambda *args: click_window.destroy())
listener = Listener(on_click=CheckRightClick)
listener.start()
click_prompt.mainloop()
listener.stop()

看看这是否有效:


driver.SwitchTo().Frame(driver.FindElement(By.xpath(".//iframe[@title='Cart']")));
driver.FindElement(By.xpath(".//a[text()='Add one of everything to my cart.']")).click();

必须将驱动程序上下文切换到框架,才能与该框架中的元素交互。在C#中,它是RemoteWebDriver.SwitchTo().Frame();对不起,我不知道它在Python中是什么样子的,你需要深入研究文档。

您可以使用驱动程序直接转到iframe url,只需从出现的iframe中复制它,就可以直接访问它,而不是通过弹出框。

driver.get('iframe.url')
driver.find_element_by_css_selector('iframeselector').click()

而不是

driver.get('website.url')
driver.find_element_by_css_selector('selector').click()
#click button that opens iframe
driver.find_element_by_css_selector('iframeselector').click()

这使得通过css选择器可以更容易地选择元素,我建议远离鼠标协调,因为不同设备的缩放比例不同。。衷心希望这能有所帮助。。P.S尽量使用css选择器,而不是xpath,因为它通常更通用(更少bug(

最新更新