问题
I'm making an application (Windows 10 and selenium chromedriver) that makes an ad for me on an ad website, with all the details, and now I want to get to the part of uploading images for it. I'm trying something like:
# Upload images
# Change the directory from the current running project's directory
# to the subsequent images folder
os.chdir(os.getcwd()+"/images")
# For each image that's in the folder
for file in os.getcwd():
# Click the upload button on the website to open up the windows
# directory viewer, and then select all the images it sees there?
driver.find_element_by_xpath('//*[@id="ImageUploadButton"]').send_keys(os.getcwd()+file)
# change directory back to the original os.getcwd()
os.chdir("..")
...trying to adapt another answer I found on SO. I have the program to run up to this point and it runs with no errors, however it finishes by bringing up this directory window:
...which is clearly not the directory of the project, and not the directory of the project/images folder. I'm not even sure it's the right solution, but this is the first time I've tried to do this. Any ideas? Thanks!
UPDATE
As requested, here is the html code of the the fileupload section:
<h2>
<div class="number">4</div>
Media</h2>
<ul class="post-ad-layout">
<li class="jsonly">
<div id="MediaImageUpload" class="clearfix form-section placeholders">
<p class="images-title">Add at least one photo to complete your ad.</p>
<div class="images-content">
<h3>Add photos to attract interest to your ad</h3>
<div class="images-content-secondary">
<p>Include pictures with different angles and details. You can upload a maximum of <span id="MaxImages">10</span> photos, that are at least 300px wide or tall (we recommend at least 1000px).</p>
<p>Drag and drop to change the order of your pictures.</p>
</div>
</div>
<ol id="MediaUploadedImages">
</ol>
<span class="field-message" data-for="FileUploadInput"></span>
<div id="FileInputWrapper" class="file-input-wrapper">
<input type="hidden" name="file" class="fileErrorBox">
<div class="imageUploadButtonWrapper">
<button id="ImageUploadButton" type="button" class="button-update-cancel short file-upload-button">
Select Images</button>
</div>
</div>
</div>
</li>
回答1:
Tested locally not on the server.
# get the button element
ele = driver.find_element_by_id("ImageUploadButton")
# add a hidden file input ( might have to change the onchange event based on the events associated to the button in above line as you don't have a form)
driver.execute_script("var x= document.createElement('INPUT');x.setAttribute('type', 'file'); x.setAttribute('onchange','this.form.submit()');x.setAttribute('hidden', 'true'); arguments[0].appendChild(x);",ele)
# send the picture path here ( this should upload the file)
driver.find_element_by_xpath("//input[@type='file']").send_keys("picture path should go here")
来源:https://stackoverflow.com/questions/56087759/python-3-selenium-os-how-to-upload-all-images-in-folder