谷歌照片没有
<input type ='file'>
。仅当按下 上传按钮 => 计算机时才会出现。然后,它将出现在 body 标签下。这是输入代码:
<input type="file" multiple="" style="display: none" jsname="G1bupd" accept=".3fr,.3gp,.arw,.avi,.cr2,.cr3,.crw,.dc2,.dcr,.dng,.erf,.heic,.jpeg,.k25,.kdc,.mdc,.mef,.mkv,.mos,.mov,.mrw,.mts,.nef,.nrw,.orf,.pef,.qtk,.raf,.raw,.rdc,.rw2,.sr2,.srf,.webp,.x3f,image/bmp,image/gif,image/jpeg,image/png,image/tiff,image/webp,video/mp4,video/x-m4v,video/*" jsaction="change:.CLIENT">
这似乎是 AngularJS。问题是当按上传=>计算机时它会显示文件输入对话框。我不想要这个
我的想法是手动创建上面的输入行并且不要按上传按钮。然后发送_keys。但失败了。
另一种方法是使用autoit dll与输入对话框文件交互。但这不是最佳的
是什么导致我的想法失败?如何解决这个问题。 希望大家帮忙
我看了照片,你应该可以使用下面的。您无需单击上传 > 计算机。只需拨打电话即可。
driver.FindElement(By.Xpath("//input[@type='file']").SendKeys(@"C:\my\file.jpg"));
3年后,我发现自己在这篇文章中尝试同样的事情。 Dazed 之前的答案通常会起作用,但在这种情况下需要进行一些修改。
页面加载时执行以下操作(source):
driver.execute_script(
"HTMLInputElement.prototype.click = function() { " +
" if(this.type !== 'file') HTMLElement.prototype.click.call(this); " +
"};
(抱歉,这是Python而不是Java)
现在按页面上的
upload > computer
按钮通常会打开对话框。然后搜索输入元素(如 Dazed 的答案):
upload_computer_button.click()
time.sleep(5)
file_input = driver.find_element(By.XPATH, "//input[@type='file']")
现在您可能需要更改元素的显示属性:
driver.execute_script("arguments[0].style.display = 'block';", file_input)
time.sleep(1)
然后发送文件:
file_input.send_keys(file_path)
Google 通常的做法:按下按钮时,JS 代码会运行 (1) 以某种方式启用隐藏的
<input>
元素,然后 (2) 触发其上的单击事件,导致文件对话框打开。
上面的代码运行 Google 的 JS 代码,但覆盖
<input>
元素上的点击处理程序,因此假点击事件不会打开对话框。但该元素仍然已启用,因此发送文件路径可以工作。 Google 实际上如何启用/禁用该元素超出了我的范围 🤷u200d♂️ .. 但这样就没关系了
(另外:如果要上传多个文件,请将它们放在
file_path
中,并用\n
分隔)