如何在不创建文件选择器弹出窗口的情况下执行可避免的脚本:Python_Selenium_GooglePhotos

How to execute an avoidable script without creating a file picker pop up : Python_Selenium_GooglePhotos

我正在尝试将图像上传到与目录名称相同的相册。在单击 'Select from Computer' link 之前,输入字段不可用。如果我单击,它会创建一个查找器 windows 到 select 个文件,Selenium 无法处理。

我搜索了 google 和 Whosebug,但找不到其他人遇到的类似问题..

google_photos_url = "https://photos.google.com/albums"
print("Opening Google Photos....")
driver.get(google_photos_url)
print("Finding Button to create new album....")
album_link = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.MTmRkb.XhF3Vb")))
print("Creating new album....")
album_link.click()
print("Finding element to enter album name...")
enter_album_name = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "textarea.ajQY2.v3oaBb")))
print("waiting...")
print("Entering album name....")
enter_album_name.send_keys(album_name)
print("Clicking Select photos link....")
out_of_textarea = driver.find_element_by_xpath("//div[@jscontroller ='IZGRkd']")
driver.execute_script('arguments[0].style = ""; arguments[0].style.display = "block"; arguments[0].style.visibility = "visible";',out_of_textarea)
print('Finding Select from computer link....')
select_from_computer = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, "span.VfPpkd-vQzf8d")))
driver.execute_script('arguments[0].style = ""; arguments[0].style.display = "block"; arguments[0].style.visibility = "visible";', select_from_computer)
driver.execute_script("arguments[0].click();", select_from_computer)#This is needed to create the dynamic 'input' field, yet it creates a finder pop up which just piles up.
input_field = driver.find_element_by_xpath("//input[@type = 'file']")
driver.execute_script('arguments[0].style = ""; arguments[0].style.display = "block"; arguments[0].style.visibility = "visible";', input_field)
print(input_field)
input_field.send_keys("/Volumes/path/to/jpg")

如果我们可以通过执行与元素相关的脚本来创建输入字段 'select_from_computer ' 以其他方式;问题就解决了。

这是一个解决方案。 首先用

禁用取景器弹出窗口(
# disable the OS file picker
            driver.execute_script("""
                document.addEventListener('click', function(evt) {
                  if (evt.target.type === 'file')
                    evt.preventDefault();
                }, true)
                """)

然后点击生成输入元素的元素。 然后 send_keys 到该元素。 如果要发送具有相同输入元素的多个文件,请创建一个包含所有文件路径的大字符串,并用换行符分隔。(see here) 这适用于 Google 张照片。 与其等待特定时间上传图片,不如跟踪标语 'Uploading' 的元素 css。如果它在那里,不要做任何事情,一旦它消失(即上传完成并加载相册)进行下一步。(see here) 我很快就会在 Github 上发布脚本。