Как загрузить фотографию, не являясь type = "file"? - PullRequest
0 голосов
/ 19 июня 2020

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

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager

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

def changePhoto():
    driver.get("https://www.instagram.com/accounts/edit/")

    driver.find_element_by_xpath("//button[@class=\'sqdOP yWX7d    y3zKF     \']")\
        .send_keys("This is where I put the directory for the photo I want to upload")

def instaProfile(un, pw):
    driver.get("https://instagram.com")
    driver.find_element_by_xpath("//input[@name=\'username\']")\
        .send_keys(un)
    driver.find_element_by_xpath("//input[@name=\'password\']")\
        .send_keys(pw)
    driver.find_element_by_xpath("//button[@type='submit']")\
        .click()
    driver.find_element_by_xpath("//img[@class=\'_6q-tv\']")\
        .click()
    driver.get("https://instagram.com/" + un.lower() + "/")

username = "DummyUsername"
password = "DummyPassword"

instaProfile(username, password)
changePhoto()

Итак, хотя я считаю, что это обычно работает, проблема здесь в том, что кнопка, которую должен сделать Instagram, не указана как загрузка файла, поэтому send_keys не может передать каталог.

Я пробовал использовать .click (), чтобы открыть затем используйте driver.window_handles [], но он, похоже, не распознает окно выбора файла как фактическое окно и говорит, что driver.window_handles [1] не настоящий

1 Ответ

0 голосов
/ 19 июня 2020

Не знаю, полезно ли это, но в Java для загрузки файлов с помощью Selenium мы используем класс Robot, потому что диалоговое окно, которое открывается, не является частью браузера. Вот почему вы не можете найти для него селектор, и это не дескриптор окна, поскольку он не является частью браузера.

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