无法使用带 python 的 selenium 通过 sendkeys 将文件上传到 iframe 中的按钮元素
Unable to upload file by sendkeys into button element within iframe using selenium with python
[环境]:Python + 硒
我正在尝试将本地文件上传到上传文件按钮。
首先,我尝试查看是否可以找到该元素并单击该按钮,然后使用
成功了
driver.switch_to_frame("upload_frame")
driver.find_elements(By.ID, 'id_file').click()
所以,我使用相同的方式,但将 click()
替换为 send_keys()
以进行文件上传。
driver.switch_to_frame("upload_frame")
driver.find_elements(By.ID, 'id_file').send_keys("xxx.bin")
但是传不进去值
所以,我尝试使用其他定位器如下:(None 其中可以工作)
driver.find_element(By.XPATH, "//button[text()='Update from File']")
driver.find_elements(By.XPATH, "//*[@id='id_file']")
driver.find_elements(By.XPATH, "//input[@id='file']")
此外,我也用谷歌搜索了很多类似的问题,但找不到solution/answer。
想征求您的意见并让我对此有所了解吗?
谢谢。
HTML 代码片段:
<iframe id="upload_frame" height="30px" frameborder="0" width="0" src="/web/setting/upload.html?r=1422498136526" scrolling="no"
name="upload_frame" style="width: 170px;">
<!DOCTYPE html>
<html>
<head>
<body onload="page_load();">
<div id="content" class="b1">
<form id="form_firm" action="/cgi-bin/system_mgr.cgi" enctype="multipart/form-data" method="post" name="form_firm">
<input type="hidden" value="cgi_firmware_upload" name="cmd">
<div class="file_input_div">
<button id="id_file" type="button" style="border: 2px solid rgb(70, 70, 70); background: none repeat scroll 0% 0% rgb(33, 33, 33);">
<span class="_text" lang="_firmware" datafld="update_b">Update from File</span>
</button>
<input id="file" class="file_input_hidden" type="file" onchange="start_upload();" onclick="clear_upload_path();" style="cursor:pointer"
name="file">
</div>
</form>
</div>
</body>
</html>
</iframe>
driver.find_elements(By.ID, 'id_file').send_keys("xxx.bin")
将不起作用,因为它对应于 button element
而不是具有类型文件的 input element
。
使用selenium进行简单的文件上传,必须先搜索type为file的input标签。正如在您的代码中,那必须是 :
<input id="file" class="file_input_hidden" type="file" onchange="start_upload();" onclick="clear_upload_path();" style="cursor:pointer" name="file">
请使用以下代码进行文件上传:
driver.switch_to_frame("upload_frame")
driver.find_element(By.ID, 'file').send_keys('//path of the file to upload')
注:-上面对应的是"input tag with type file".
[环境]:Python + 硒
我正在尝试将本地文件上传到上传文件按钮。
首先,我尝试查看是否可以找到该元素并单击该按钮,然后使用
成功了driver.switch_to_frame("upload_frame")
driver.find_elements(By.ID, 'id_file').click()
所以,我使用相同的方式,但将 click()
替换为 send_keys()
以进行文件上传。
driver.switch_to_frame("upload_frame")
driver.find_elements(By.ID, 'id_file').send_keys("xxx.bin")
但是传不进去值
所以,我尝试使用其他定位器如下:(None 其中可以工作)
driver.find_element(By.XPATH, "//button[text()='Update from File']")
driver.find_elements(By.XPATH, "//*[@id='id_file']")
driver.find_elements(By.XPATH, "//input[@id='file']")
此外,我也用谷歌搜索了很多类似的问题,但找不到solution/answer。
想征求您的意见并让我对此有所了解吗? 谢谢。
HTML 代码片段:
<iframe id="upload_frame" height="30px" frameborder="0" width="0" src="/web/setting/upload.html?r=1422498136526" scrolling="no"
name="upload_frame" style="width: 170px;">
<!DOCTYPE html>
<html>
<head>
<body onload="page_load();">
<div id="content" class="b1">
<form id="form_firm" action="/cgi-bin/system_mgr.cgi" enctype="multipart/form-data" method="post" name="form_firm">
<input type="hidden" value="cgi_firmware_upload" name="cmd">
<div class="file_input_div">
<button id="id_file" type="button" style="border: 2px solid rgb(70, 70, 70); background: none repeat scroll 0% 0% rgb(33, 33, 33);">
<span class="_text" lang="_firmware" datafld="update_b">Update from File</span>
</button>
<input id="file" class="file_input_hidden" type="file" onchange="start_upload();" onclick="clear_upload_path();" style="cursor:pointer"
name="file">
</div>
</form>
</div>
</body>
</html>
</iframe>
driver.find_elements(By.ID, 'id_file').send_keys("xxx.bin")
将不起作用,因为它对应于 button element
而不是具有类型文件的 input element
。
使用selenium进行简单的文件上传,必须先搜索type为file的input标签。正如在您的代码中,那必须是 :
<input id="file" class="file_input_hidden" type="file" onchange="start_upload();" onclick="clear_upload_path();" style="cursor:pointer" name="file">
请使用以下代码进行文件上传:
driver.switch_to_frame("upload_frame")
driver.find_element(By.ID, 'file').send_keys('//path of the file to upload')
注:-上面对应的是"input tag with type file".