通过selenium上传到谷歌照片

问题描述 投票:0回答:2

谷歌照片没有

<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与输入对话框文件交互。但这不是最佳的

是什么导致我的想法失败?如何解决这个问题。 希望大家帮忙

java python c# selenium google-photos
2个回答
0
投票

我看了照片,你应该可以使用下面的。您无需单击上传 > 计算机。只需拨打电话即可。

  driver.FindElement(By.Xpath("//input[@type='file']").SendKeys(@"C:\my\file.jpg"));

0
投票

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
分隔)

© www.soinside.com 2019 - 2024. All rights reserved.