Selenium Python 自动化 - 找不到上传按钮/输入类型 = "file"



我试图找到一个输入类型="file"的元素,然而,在研究了许多不同的方法和方法之后,基于XPath、CSS选择器、标签等在页面上简单地定位一个元素。脚本遇到NoSuchElementException。元素在iFrame中

例外是:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.jsx-2404389384"}

导致异常的代码是:

driver.find_element(by=By.CSS_SELECTOR, value='div.jsx-2404389384')

如有任何意见,我将不胜感激,谢谢

编辑:网页上的实际元素是:

<input type="file" accept="video/*" class="jsx-2404389384 " style="display: none;">

对不起,元素是在一个iframe…我一直在尝试不同的方法来解决这个问题,我必须看看iframe部分:|

您需要根据它的类型而不是它的类名来定位元素,因为这里出现的类名似乎是一个动态值。
试试这个:

driver.find_element(By.CSS_SELECTOR, "input[type='file'][accept*='video']")

与XPath相同:

driver.find_element(By.XPATH, "//input[@type='file'][contains(accept,'video')]")

另外,我希望您理解,您需要将上传文件的绝对路径作为字符串发送到此元素,如下所示:

driver.find_element(By.XPATH, "//input[@type='file'][contains(accept,'video')]").send_keys("C:imagesimageupload.exe")

首先,定位器使用了错误的HTML标签。div.jsx2404389384将定位具有<div>标签和class=jsx2404389384的元素。

您想要定位具有<input>标记的元素,因此

driver.find_element(By.CSS_SELECTOR, 'input.jsx-2404389384')

应该可以工作,假设只有一个<input>元素具有该类。如果有多个,您需要使用driver.find_elements,并从<input>列表中找到正确的class=jsx-2404389384

第二,这个类看起来像是自动生成的,或者可能会改变,所以CSS选择器使用属性匹配,比如

driver.find_element(By.CSS_SELECTOR, input[type='file'][accept*='video'])

更好。这将找到type属性匹配'file'accept属性包含'video'的标签。

要了解更多信息,Selenium文档链接到一个很棒的CSS选择器资源。如果需要的话,后一个链接将提供更多关于更高级和特定的CSS选择器的信息。还有Mozilla开发人员网络。

元素在iframe中,所以我只需要切换到iframe,然后原始的XPATH, CSS等代码就可以工作了。

无论如何我都很感激你的回答!

相关内容

最新更新