【发布时间】: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")))超时
关于如何解决这个问题的任何想法?
【问题讨论】: