【问题标题】:Upload image on Facebook Marketplace with selenium (python)使用 selenium (python) 在 Facebook Marketplace 上传图片
【发布时间】:2023-01-10 09:28:42
【问题描述】:

我正在尝试在 Facebook 市场上自动创建广告。 我成功登录并进入正确的页面。 但我不知道如何用硒上传图像。 实际上,处理图像上传的元素不是输入类型=文件,而是一个 div,它具有打开 Windows 文件窗口以选择文件的按钮的作用。

这是元素的 html:

<div class="x1i10hfl x1qjc9v5 xjbqb8w xjqpnuy xa49m3k xqeqjp1 x2hbi6w x13fuv20 xu3j5b3 x1q0q8m5 x26u7qi x972fbf xcfux6l x1qhh985 xm0m39n x9f619 x1ypdohk xdl72j9 x2lah0s xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r x2lwn1j xeuugli xexx8yu x4uap5 x18d9i69 xkhd6sd x1n2onr6 x16tdsg8 x1hl2dhg xggy1nq x1ja2u2z x1t137rt x1o1ewxj x3x9cwd x1e5q0jg x13rtm0m x1q0g3np x87ps6o x1lku1pv x1a2a7pz x78zum5 x1iyjqo2" role="button" tabindex="0">

我已经尝试过这段代码:

driver.find_element(By.XPATH, element_xpath).send_keys(absolute_path)

但它不起作用

有没有人已经尝试并成功了?

【问题讨论】:

    标签: python selenium selenium-webdriver web-scraping automation


    【解决方案1】:

    使用 Selenium 上传文件是通过将上传的文件发送到一个特殊元素来完成的。这不是您作为用户通过 GUI 单击以上传元素的元素。实际接收通常与此 XPath 匹配的上传文件的元素:
    //input[@type='file']
    这是完整的工作代码——我在我的 PC 上用我的 FB 帐户上传了一些文件试过这个。出于隐私原因,我删除了屏幕截图的详细信息,但它显然有效

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = Options()
    options.add_argument("start-maximized")
    options.add_argument("--disable-infobars")
    options.add_argument("start-maximized")
    options.add_argument("--disable-extensions")
    
    # Pass the argument 1 to allow and 2 to block
    options.add_experimental_option(
        "prefs", {"profile.default_content_setting_values.notifications": 2}
    )
    
    webdriver_service = Service('C:webdriverschromedriver.exe')
    driver = webdriver.Chrome(options=options, service=webdriver_service)
    wait = WebDriverWait(driver, 20)
    
    url = "https://www.facebook.com/"
    driver.get(url)
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='email']"))).send_keys(my_username)
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='pass']"))).send_keys(my_password)
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[name='login']"))).click()
    driver.get("https://www.facebook.com/marketplace/create/item")
    wait.until(EC.presence_of_element_located((By.XPATH, "//input[@type='file']"))).send_keys("C:/Users/my_user/Downloads/doch.jpeg")
    

    这是这段代码的截图:

    【讨论】:

    • 谢谢,它有效,我什至不考虑搜索输入,因为我没有在 div 中看到它......
    • 我们一直都在学习新事物,没关系?
    【解决方案2】:

    x1i10hfl x1qjc9v5 xjbqb8w xjqpnuy xa49m3k xqeqjp1 x2hbi6w x13fuv20 xu3j5b3 x1q0q8m5 x26u7qi x972fbf xcfux6l x1qhh985 xm0m39n x1ypdohk xdl72j9 x2lah0s xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r x2lwn1j xeuugli xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1ja2u2z x1t137rt x1o1ewxj x3x9cwd x1e5q0jg x13rtm0m x3nfvp2 x1q0g3np x87ps6o x1lku1pv x1a2a7pz x1ey2m1c x9f619 xds687c x10l6tqk x17qophe x13vifvy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-12
      • 2023-03-13
      • 2022-11-25
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多