Python: невозможно загрузить файл на веб-сайт, используя сплинтер или селен - PullRequest
0 голосов
/ 16 ноября 2018

Итак, я пытался создать скрипт загрузки файла для веб-сайта на python, но файл не загружен.Вот код -

from splinter import Browser
import random, string
import sys

uploadurl = "https://shareoverair.com/upload"

randstring = ''.join(random.choices(string.ascii_letters + string.digits, 
k=6))

browser = Browser('chrome', headless=True)
browser.visit(uploadurl)
browser.fill('fileid', randstring)
browser.attach_file('fileupload', str(sys.argv[1]))
lul = browser.find_by_css(".btn")
for i in range(0, len(lul)-1):
    lul[i].click
    i += 1
print(browser.url)
print(randstring)

цикл for только для моего тестирования.Я удостоверился, что нажал каждую кнопку.Я даже пытался нажать кнопку 1 на 1, но не повезло.Вот веб-сайт, на который я пытаюсь загрузить - https://shareoverair.com/upload

Вот форма загрузки -

<form id="upload-form" enctype="multipart/form-data" method="post" novalidate="novalidate">
<div class="alert bg--error hide" id="upload-error">
<div class="alert__body">
<span></span>
</div>
<div class="alert__close">
×
</div>
</div>
<div class="upload-input input-text">
<label>Choose a unique File ID:</label>
<input type="text" name="fileid" id="fileid" placeholder="File ID">
<a class="generate-file-id" href="javascript:void(0);" style="float: right;">Generate?</a>
</div>
<div class="upload-input input-text upload-method-file">
<label>Select your file:</label>
<label for="fileupload" class="file-choser">Choose File</label>
<input type="file" id="fileupload" name="fileupload" style="display: none;">
</div>
<div class="upload-input upload-password input-text hide">
<label>Choose a Password:</label>
<input type="password" name="password" id="password" placeholder="Password">
</div>
<button class="btn btn--primary type--uppercase upload-button" type="submit">Upload Now</button>
<div class="file-upload-progress progress-horizontal progress-horizontal--lg hide">
<div class="progress-horizontal__bar upload-progressbar" data-value="0"><div class="progress-horizontal__progress" style="width: 0%;"></div></div>
<span class="progress-horizontal__label h5 upload-status">Progress: 0%</span>
</div>
</form>

Я вместо этого попытался использовать запросы.Вот код -

import requests
import random, string
import sys

uploadurl = "https://shareoverair.com/upload"
filestring = ''.join(random.choices(string.ascii_letters + string.digits, k=5))
fileid = {'fileid': filestring}
file = {'fileupload': open(str(sys.argv[1]), 'rb')}
headers = {'User-Agent': 'Mozilla/5.0'}

upload = requests.post(uploadurl, headers=headers, files=file, data=fileid)

print(upload.text)

print(filestring)

PS- Код действительно выполняется!

Я пытался использовать поиск по тексту, а также «Загрузить сейчас», но это исключает исключение индекса

edit- Я тоже пытался использовать селен, но не повезло

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random, string
import sys

uploadurl = "https://shareoverair.com/upload"

randstring = ''.join(random.choices(string.ascii_letters + string.digits, 
k=6))

options = Options()
options.headless = True

browser = webdriver.Chrome(options=options)
browser.get(uploadurl)
fild = browser.find_element_by_id('fileid')
fild.send_keys(randstring)
uplfile = browser.find_element_by_name('fileupload')
uplfile.send_keys(sys.argv[1])
upload = browser.find_element_by_xpath("//button[contains(text(), 'Upload Now')]")
print(upload)
upload.click()
print(browser.current_url)
print(randstring)
...