Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存使用Python Selenium上载的文件时遇到问题_Python_Python 3.x_Selenium_Selenium Webdriver_Modal Dialog - Fatal编程技术网

保存使用Python Selenium上载的文件时遇到问题

保存使用Python Selenium上载的文件时遇到问题,python,python-3.x,selenium,selenium-webdriver,modal-dialog,Python,Python 3.x,Selenium,Selenium Webdriver,Modal Dialog,我使用Python和Chrome在Selenium中工作。当我进入图片上传部分时,我会执行以下操作: pictureChange=driver。通过xpath(//input[@class='custom-file'和@type='file'])查找元素 photoLocation=[输入本地映射驱动器上的文件位置] 图片更改。发送密钥(照片定位) 这似乎和预期的一样,在保存新图片之前,图片会弹出一个用于剪切/缩放的覆盖图。该覆盖图是一个div class=“modal box”id=“cro

我使用Python和Chrome在Selenium中工作。当我进入图片上传部分时,我会执行以下操作:

pictureChange=driver。通过xpath(//input[@class='custom-file'和@type='file'])查找元素
photoLocation=[输入本地映射驱动器上的文件位置]
图片更改。发送密钥(照片定位)
这似乎和预期的一样,在保存新图片之前,图片会弹出一个用于剪切/缩放的覆盖图。该覆盖图是一个div class=“modal box”id=“cropicmodal”。我可以与图片交互以进行缩小等操作。但当我单击“保存”(手动或使用我的程序)时,新图片没有保存。覆盖层消失了,旧图片仍在显示。如果我手动选择要上载的文件,然后单击“保存”,效果会很好。只有在我使用“发送密钥”命令上载照片时,我才能实际保存它。你知道为什么吗?下面是保存按钮:

SaveCancel

如果文件仍然通过您的
发送密钥
策略上传,我认为问题不在于上传,而在于保存文件的方法。我不确定您正在使用什么样的点击策略,但您可以尝试使用一些Javascript来改变这一点

# locate save button
save_button = driver.find_element_by_xpath("//span[text()='Save']")

# click save button with JS
driver.execute_script("arguments[0].click();", save_button) 

如果这不起作用,我们可以改变你上传文件的方式,看看是否有帮助。但是我不相信实际上传是这里的问题。

如果文件仍然通过您的
发送键
策略上传,我认为问题不在于上传,而在于保存文件的方法。我不确定您正在使用什么样的点击策略,但您可以尝试使用一些Javascript来改变这一点

# locate save button
save_button = driver.find_element_by_xpath("//span[text()='Save']")

# click save button with JS
driver.execute_script("arguments[0].click();", save_button) 

如果这不起作用,我们可以改变你上传文件的方式,看看是否有帮助。但我不相信实际上传是这里的问题。

我会尝试使用
WebDriverWait

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

wait = WebDriverWait(driver, 10)
picture_change = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='custom-file' and @type='file']")))
photo_location = "Path/to/the/file"
picture_change.click()
picture_change.send_keys(photo_location)

save_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Save']")))
save_button.click()

仅供参考:python惯例是对变量使用小写字母

我会尝试使用
WebDriverWait

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

wait = WebDriverWait(driver, 10)
picture_change = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='custom-file' and @type='file']")))
photo_location = "Path/to/the/file"
picture_change.click()
picture_change.send_keys(photo_location)

save_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Save']")))
save_button.click()

仅供参考:python惯例是对变量使用小写字母

您试图单击的div元素不是按钮。您需要找到带有“button”标记的元素,该标记对应于您尝试单击的按钮

您尝试单击的div元素不是按钮。您需要找到带有“button”标记的元素,该标记对应于您尝试单击的按钮

我尝试了许多方法来单击save按钮(包括您展示的Javascript)。但我最终意识到,即使我让我的程序运行,然后自己手动点击“保存”按钮,也不是在保存。这就是为什么我认为最初的上传可能是个问题。我只是运行了一个测试:我让我的程序运行到照片上传部分,然后让它休眠6秒钟,而我手动执行上传步骤。然后,我的程序成功地点击了“保存”按钮,并保存了图片。因此,这显然是一个上传问题。听起来像是一些最终完成文件上传的Javascript事件没有在自动场景和手动场景中运行。这似乎是一个特定于网站的问题——也许其他用户的答案对你有用。但我最终意识到,即使我让我的程序运行,然后自己手动点击“保存”按钮,也不是在保存。这就是为什么我认为最初的上传可能是个问题。我只是运行了一个测试:我让我的程序运行到照片上传部分,然后让它休眠6秒钟,而我手动执行上传步骤。然后,我的程序成功地点击了“保存”按钮,并保存了图片。因此,这显然是一个上传问题。听起来像是一些最终完成文件上传的Javascript事件没有在自动场景和手动场景中运行。这似乎是一个特定于网站的问题——可能其他用户的答案对您有用。我做了这些更改,但得到了一个错误:picture\u change=wait.until(EC.element\u to\u be\u clickable((By.XPATH,//input[@class='custom-file'和@type='file'])file“C:\Program Files(x86)\Python\lib\site packages\selenium\webdriver\support\wait.py”,第80行,在until raise TimeoutException(message,screen,stacktrace)selenium.common.exceptions.TimeoutException:message:@eec错误可能由许多不同的原因引起。。。你将不得不分享更多的HTML(围绕文件的输入)或网站使用,以帮助你更多…我明白了!当我为您获取文件输入周围的HTML时,我意识到有两行代码与我的XPATH搜索匹配…显然这两行代码看起来都有效,但实际上只有一行有效。我将搜索改为使用id进行XPATH查找,现在可以上传和保存了。谢谢@我很乐意帮忙!我做了这些更改,但得到了一个错误:picture\u change=wait.until(EC.element\u to\u be\u可点击((By.XPATH,//input[@class='custom-file'和@type='file']))文件“C:\Program Files(x86)\Python\lib\site packages\selenium\webdriver\support\wait.py”,第80行,在until-raise-TimeoutException(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:Message:@eec错误可能由许多不同的原因造成。。。你将不得不分享更多的HTML(围绕文件的输入)或网站使用,以帮助你更多…我明白了!当我为您获取文件输入周围的HTML时,我意识到有两行代码与我的XPATH搜索匹配…显然这两行代码看起来都有效,但实际上只有一行有效。我将搜索改为使用id进行XPATH查找,现在可以上传和保存了。谢谢@我很乐意帮忙!只要