PYTHON - Автоматизация преобразования файлов Tkinter & Selenium: функция send_keys не возвращает атрибутов и проблем с поиском элементов - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь автоматизировать преобразование файлов из файлов PDF в Excel. Я собираюсь использовать простой веб-сайт ( pdftoexcel.com ) для преобразования файлов.

Сначала я хотел использовать свои недавно приобретенные навыки Tkinter как способ просмотра файла в качестве первой функции кода:

def open_file():

root.filename =  filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("PDF files","*PDF"),("jpeg files","*.jpg"),("all files","*.*"), ))
print (root.filename)
filelocation = (root.filename)
print (filelocation)

root = Tk()

button1 = Button (root, text = "Browse", command=open_file, fg = "red",bg = "white")
img = PhotoImage (location/to/file/picture.png)
button1.config (image=img)
button1.pack()
root.geometry("500x50")
root.mainloop()

Как только у меня появилась функция просмотра, я начал писать код, используя Selenium для навигации по Google Chrome:

chromedriver = "path/to/chromedriver.exe"

driver = webdriver.Chrome(ChromeDriverManager().install())

driver.get("https://www.pdftoexcel.com/")
El = driver.find_element_by_name("Filedata").click()
El.send_keys(filelocation)
driver.find_element_by_link_text("/fetch.php?id=361caa98-17b8-11e9-8f58-0cc47a792c0a").click()

time.sleep(3)
driver.quit()

Кажется, все идет гладко, пока мне не нужно выбрать файл на сайте. Я хочу иметь возможность использовать путь к файлу, который я получил, когда просматривал свой файл с помощью Tkinter. Я видел людей, использующих

send_keys()

функция, в которую они помещают путь к файлу (поэтому у меня есть переменная filelocation)

El.send_keys(filelocation)

Однако я продолжаю получать эту ошибку:

AttributeError: 'NoneType' object has no attribute 'send_keys'

Кроме того, с веб-сайта я пытаюсь получить элементы «Загрузить» и «Загрузить» для автоматической загрузки и загрузки. Кажется, загрузка работает нормально, но независимо от того, какой элемент я пытаюсь использовать для загрузки (Xpath, имя класса, текст ссылки), я получаю следующие ошибки:

 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"/fetch.php?id=361caa98-17b8-11e9-8f58-0cc47a792c0a"}
 (Session info: chrome=71.0.3578.98)

Я исследовал сеть и не могу найти решение, которое бы подходило для моей проблемы.

Будет полезна помощь с моим кодом!

1 Ответ

0 голосов
/ 14 января 2019

E1 - это возвращаемое значение функции click (), конечно, это None значение

.
driver.get("https://www.pdftoexcel.com/")
E1 = driver.find_element_by_name("Filedata").click()
E1.send_keys(filelocation)

правильный код должен быть таким:

driver.get("https://www.pdftoexcel.com/")
E1 = driver.find_element_by_name("Filedata")
E1.click()
E1.send_keys(filelocation)

Кроме того, как совет, если вы ждете веб-браузер, а не просто используете time.sleep, используйте вместо этого модуль ожидания времени селена.

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