簡體   English   中英

如何在 iframe 內的 cursor position 處獲取元素?

[英]How to get element at cursor position within iframe?

我正在嘗試使用以下代碼來獲取位於光標 position 的元素,但該元素位於 iframe 內。 我認為下面的代碼應該在光標的 position 處獲得最深的子元素,但它似乎沒有做任何事情。 我究竟做錯了什么?

當頁面加載時,我正在嘗試單擊“將所有內容之一添加到我的購物車”按鈕。

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:\Users\David\Desktop\Python\chromedriver_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()

您必須將驅動程序上下文切換到框架才能與該框架中的元素進行交互。 在 C# 它是RemoteWebDriver.SwitchTo().Frame(); 抱歉,我不知道它在 Python 中是什么樣子,您需要深入研究文檔。

看看這是否有效:


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

You can use the driver to go directly to the iframe url, just copy it from the iframe that comes up and you can access it directly rather than through a pop-up box.

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 選擇器的 select 元素更容易,我建議遠離鼠標協調,因為比例因設備而異。 . 真誠地希望這會有所幫助。 . PS 嘗試使用 css 選擇器,而不是 xpath,因為它通常更通用(錯誤更少)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM