【问题标题】:How do I make Selenium update a Facebook profile picture如何让 Selenium 更新 Facebook 个人资料图片
【发布时间】:2019-01-14 19:56:27
【问题描述】:

我正在尝试让 Selenium 网络驱动程序(控制 Firefox)更新它登录的 Facebook 帐户的个人资料图片。 我使用的典型建议是查找文件输入和 send_keys 我的文件路径,这就是我得到的:

image.find_element_by_xpath("//input[contains(@title,'Choose a file to upload')]").send_keys(os.getcwd()+'test.png')

无论如何,这是我得到的错误:

Traceback(最近一次调用最后一次):
中的文件“C:/Users/maste/PycharmProjects/accountGenerator/accountGenerator.py”,第 136 行 image.find_element_by_xpath("//input[contains(@title,'选择要上传的文件')]").send_keys(os.getcwd()+'test.png')
文件“C:\Users\maste\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 479 行,在 send_keys “值”:keys_to_typing(value)})
_execute 中的文件“C:\Users\maste\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py”,第 628 行 return self._parent.execute(command, params)
执行中的文件“C:\Users\maste\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 320 行 self.error_handler.check_response(响应)
文件“C:\Users\maste\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 242 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.ElementNotInteractableException:消息:元素 > 无法通过键盘访问

那个 是<input id="js_h" class="_n _5f0v" type="file">,我在HTML 的任何地方都找不到它。有人有想法吗?

【问题讨论】:

  • Facebook 不允许您抓取它们。使用 API,或者如果在 API 中无法执行,请不要执行。

标签: javascript python facebook selenium-webdriver dom-events


【解决方案1】:

您可以使用 Autoit 及其编辑器进行此类文件上传操作,您只需找到您必须上传文件的元素按钮,然后在您需要运行 autoit 文件的按钮操作上找到它的简单功能只需从按钮运行单击命令,然后选择您描述的文件并上传即可。

下面有分享链接,方便大家理解

https://www.softwaretestingmaterial.com/upload-file-using-autoit/

【讨论】:

    【解决方案2】:

    异常ElementNotInteractableException在找到一个元素时发生,但你不能对其执行任何操作。例如,您可能单击或调用发送键,但操作最终会失败。

    由于以下多种原因,可能会出现这种情况:

    • 元素不可见/未完全显示
    • 元素不在屏幕上
    • 隐藏在其他元素后面或隐藏自身的元素
    • 需要您执行一些操作才能启用它 它。

    在这种情况下,您可以尝试以下方法:-

    1.等到元素可见或可点击

    WebDriverWait letsWait = new WebDriverWait(driver, timeout);
    letsWait.until(ExpectedConditions.visibilityOf(item)); 
    letsWait.until(ExpectedConditions.elementToBeClickable(item));
    

    2。滚动直到元素出现在显示屏下方

    Actions act = new Actions(driver);
    act.moveToElement(item);
    

    3.使用 JavaScript 处理 DOM 元素

    JavascriptExecutor jScript = (JavascriptExecutor) driver;
    jScript.executeScript("var item = document.querySelector('locator'); item.value = 'your choice';")
    

    但是,您也可以阅读这个 GitHub 线程来了解这个问题,因为其他几个人也在各自的场景中面临这个问题:https://github.com/SeleniumHQ/selenium/issues/5037

    顺便说一句,这是handling file uploads using Selenium 上的一篇解释,您可以检查不同的方法或尝试使用 Java 代替 Python。

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多