使用Selenium上传图像到Google Lens



我正在尝试上传图像使用硒在谷歌镜头使用此链接:https://lens.google.com/search?p=0

通过检查这个网站,我得出的结论是,如果我复制了一张图片,我可以用Ctrl+V将它粘贴到谷歌镜头上,它就会自动上传。我试图模仿的东西,试图粘贴图像从我的剪贴板。这段代码确实将图像存储在剪贴板上,当我停止执行并将其粘贴到浏览器中时,它会完美地上传。然而,程序不能这样做。代码如下:

import os
import win32clipboard as clp    
file_path = 'capture.png'
clp.OpenClipboard()
clp.EmptyClipboard()

wide_path = os.path.abspath(file_path).encode('utf-16-le') + b''
clp.SetClipboardData(clp.RegisterClipboardFormat('FileNameW'), wide_path)
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'#yDmH0d > div:nth-child(16) > div > ul'))).click()
actions = ActionChains(driver)
actions.send_keys(Keys.CONTROL,'v')

我尝试使用的第二种方法是找到输入元素并将文件名作为键发送,但这也不起作用。我注意到的一件事是,输入元素一开始是不可见的,直到你点击上传按钮,然后点击计算机。所以我也试着去模仿,但还是没用。代码如下:

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//*[@id="gb"]/div[2]/div[2]/div[2]/div/div/div[1]/div/div[1]/div/div[1]/span/div[1]/button'))).click()
time.sleep(1)
WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="yDmH0d"]/div[13]/div/ul/li[1]')))
time.sleep(1)
WebDriverWait(driver,20).until(EC.presence_of_element_located((By.XPATH,'//*[@id="gb"]/div[2]/div[2]/div[2]/div/div/div[2]/input'))).send_keys('capture.png')

任何想法如何使这个工作或更好的方法来上传图像?

这就是你所需要的:

from selenium.webdriver.common.action_chains import ActionChains
elem = driver.find_element(By.XPATH, '/html')
ac = ActionChains(driver)
ac.move_to_element(elem).move_by_offset(100, 100).click().perform()

用于激活页面。祝你好运!

最新更新