python-3.x - 双击不在html中的视觉元素使textarea显示selenium

标签 python-3.x selenium selenium-chromedriver

我想在文本区域中输入文本。问题是 textarea 仅在浏览器中的可视元素上单击两次后才会创建并显示在 html 中。 对于此视觉元素 Dubbelklik om je tekst te typen,我无法在 html 中找到引用它并执行 double_click() 的元素。只有容器,要么是不可点击的元素,要么允许点击,但不执行操作。

到目前为止,它都有效,双击的视觉提示出现在中心下方:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait

driver = webdriver.Chrome()
driver.get("https://www.hallmark.nl/kaarten/verjaardag-man/")
#wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='https://www.hallmark.nl:443/kaarten/verjaardag-man/grappig-m/make-that-the-cat-wise/happy-bursdeej-to-jou-3415094.aspx']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='https://www.hallmark.nl:443/kaarten/verjaardag-man/grappig-m/hallmark/een-jaguar-voor-je-verjaardag-3346861.aspx']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.ID, "btnShowSizepicker"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Standaard']"))).click()
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'showDesktop')]//button[contains(text(),'Binnenkant')]"))).click()

但从那时起,我似乎找不到任何东西可以让 Selenium 点击该元素。 我尝试单击我可以在 html 中找到的内容:

# elem = driver.find_element_by_xpath("//div[contains(@class, 'canvasAnchor')]").click()

这会产生元素不可交互错误。我还尝试过对可查找元素使用偏移量:

elem = driver.find_element_by_class_name("canvas-container")
print(elem.location)
print(elem.size)
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(elem, 0.5*elem.location.get('x'), (0.5*elem.location.get('y'))) #should click in the middle of this container
action.double_click()
action.perform()

但是对于 x 和 y 的不同元素和值,我只能让它不执行任何操作,或者单击联系人侧边栏(突出显示“Neem”一词)。

如果我手动点击两次,html中会出现一个textarea,我可以执行send_keys('hello world')

最佳答案

你要点击的元素实际上是canvas,所以你要做的就是将光标移动到需要双击的位置,然后点击那里。

我在你的代码上尝试过这个并为我工作:

from selenium.webdriver.common.action_chains import ActionChains

elem = driver.find_element_by_xpath('//*[@class="canvasWrapper active"]//*[@class="canvas-container"]')
ActionChains(driver).move_to_element_with_offset(elem, 70, 60).double_click().perform()

注意:您可能需要等待 Canvas 元素正确加载。我只是根据提示尝试了。

您可以阅读有关此鼠标操作的信息 here .

更新:

我注意到双击对我来说就像单击一样,所以改为这样。

from selenium.webdriver.common.action_chains import ActionChains
import time

elem = driver.find_element_by_xpath('//*[@class="canvasWrapper active"]//*[@class="canvas-container"]')
ActionChains(driver).move_to_element_with_offset(elem, 70, 60).click().perform()
time.sleep(1)
ActionChains(driver).move_to_element_with_offset(elem, 70, 60).click().perform()

关于python-3.x - 双击不在html中的视觉元素使textarea显示selenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53242092/

相关文章:

python - 如何将 f-string 与变量一起使用,而不是与字符串文字一起使用?

python - 在 Python 3.7 中将函数声明为返回类型

python - ChromeOption '--safebrowsing-disable-download-protection' 不会禁用 Chrome 版本 67.x 中的下载警告

python - 2 个地理数据框之间的交集

python - 无法使用网络摄像头读取帧。错误-2147483638

java - 在 IE Webdriver 中执行 switchTo(new Handle) 后,我遇到在新窗口中查找元素的问题

java - 有人可以解释为什么 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)

r - 如何使用RSelenium打开Goog​​le Chrome?

excel - Excel VBA、Selenium 和 Chromedriver 的网站登录问题

java - 无法使用 Chrome Web 驱动程序访问 servlet