Невозможно загрузить файл на веб-сайт, используя python и selenium - PullRequest
0 голосов
/ 03 мая 2018

Я хочу автоматизировать сжатие файлов на веб-сайте "http://pdfcompressor.com/". Я использовал селен для загрузки файлов, но не смог этого сделать. Ниже приведен код

file_path = "/home/gugli/Documents/script_py/Dainik_Jagron/h2.pdf"
browser = webdriver.Firefox()
url = 'http://pdfcompressor.com/'
browser.get(url)

Я попытался вставить тег ввода, но получил ошибку

browser.find_element_by_id('html5_1cciqvn90sehe7rachs1c3m03').send_keys(filepath)

это снимок входного тега

следующая ошибка:

Traceback (most recent call last):
  File "/home/gugli/Documents/script_py/Dainik_Jagron/uploadfiles.py", line 32, in <module>
    browser.find_element_by_id('html5_1cciqvn90sehe7rachs1c3m03').send_keys("/home/gugli/Documents/script_py/Dainik_Jagron/h2.pdf")
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 330, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 832, in find_element
    'value': value})['value']
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 297, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException:

Message: Unable to locate element: [id="html5_1cciqvn90sehe7rachs1c3m03"]

Файл хранится в теге ul. Но не удалось загрузить в этом теге даже. Вот снимок структуры dom до и после загрузки файла

Перед загрузкой файла

После загрузки файла

Загруженный файл сохраняется как элемент "li" (изображение 3 ). Я попытался вставить в контейнер "div id = carousel", но снова это была неудачная попытка. Как еще я могу загрузить файл здесь, используя python.

1 Ответ

0 голосов
/ 03 мая 2018

По вашему URL кажется, что элемент не найден селеном

selenium.common.exceptions.NoSuchElementException:

Message: Unable to locate element: [id="html5_1cciqvn90sehe7rachs1c3m03"]

В этом конкретном случае идентификатор поля ввода генерируется автоматически, это означает, что он будет отличаться для каждого сеанса. То, что вы видите как идентификатор, отличается от того, когда вы открываете через селен.

Я бы предложил найти элемент по XPath, а не по id в данном конкретном случае

Используйте XPath .//input[type = 'file'] или что-то другое, чтобы селен мог идентифицировать элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...