【问题标题】:Element not visible with pyvirtualdisplay and selenium in python在 python 中,pyvirtualdisplay 和 selenium 不可见元素
【发布时间】:2016-10-27 02:21:22
【问题描述】:

我正在尝试一个简单的浏览器操作,我在网站上找到一个用户名元素,然后尝试登录。我正在使用 selenium 和 python 来做到这一点。这是一些可以在我自己的本地机器上运行的简单代码。该代码在我的计算机上打开一个浏览器,然后导航到正确的用户名框并输入用户名。

from selenium import webdriver
browser = webdriver.Firefox()
browser.get(my_url)
username_element = browser.find_elements_by_name("USERNAME")[0]
username_element.clear()
username_element.send_keys(my_username)

但是,当我尝试使用 pyvirtualdisplay 在 AWS 服务器上部署相同的代码以使 Firefox 不需要弹出时,它不再起作用。

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

browser = webdriver.Firefox()
browser.get(my_url)
username_element = browser.find_elements_by_name("USERNAME")[0]
username_element.clear()
username_element.send_keys(my_username)

元素确实找到了,但我得到元素不可见错误:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

确认:

>> username_element.is_displayed()
False

我尝试了各种我在 SO 上找到的东西,包括:

  • 确保已安装 xvfb 和 xephyr
  • 添加browser.implicitly_wait(30)
  • 尝试 WebDriverWait(browser,30).until(EC.visibility_of_element_located((By.NAME, "USERNAME"))) 超时

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    你可以滚动屏幕:

    browser.execute_script("window.scrollTo(0, 600)")
    

    【讨论】:

    • 这不起作用。我仍然得到相同的不可见异常。我应该注意,用户名框位于页面顶部,所以看起来应该不是滚动问题。
    • 你可以截图确保页面上没有browser.save_screenshot('screen.png')的元素
    • 谢谢!这实际上帮助我弄清楚了。原来我的屏幕尺寸设置得不够大。
    • 所以我在回答中提到了scrollTo
    【解决方案2】:

    截图后想通了。原来我的屏幕显示设置得不够大。将显示大小更改为 (1600,900) 即可解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-18
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多