当前位置: 首页 > 面试题库 >

尝试使用selenium和python登录网页时出错

叶明辉
2023-03-14
问题内容

我收到一个元素不可见的错误:

ElementNotVisibleException: Message: u'Element is not currently visible and so may 
not be interacted with'

对于运行此代码时的每个find元素行:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.example.com')
browser.find_element_by_name('username').send_keys('myusername')
browser.find_element_by_name('password').send_keys('mypassword')
browser.find_element_by_class_name('welcomeLoginButton').click()

页面登录部分的HTML如下所示:

<div class='welcomeLoginUsername'>
<div class='welcomeLoginUsernameLabel'><b>Username:</b></div>
<div class='welcomeLoginUsernameInput'><input type='text' name='username' tabindex='1'>
<br><a class='sf' href='javascript: void(0);' onclick='showUsernamePopup();'>
<b>Forgot Username?</b></a>
</div>
</div>
<div class='welcomeLoginPassword'>
<div class='welcomeLoginPasswordLabel'>
<b>Password:</b>
<br><span class='sf'>(It's cAsE sEnSitIvE!)</span>
</div>
<div class='welcomeLoginPasswordInput'>
<input type='password' name='password' tabindex='2'>
<br><a class='sf' href="javascript: void(0);" onclick="showPasswordPopup();">
<b>Forgot Password?</b></a>
</div>
</div>
</div>
<input type="submit" value="" class='welcomeLoginButton' style='border: 0px; 
padding: 0px; margin: 0px;) no-repeat;' onclick='document.forms["login"].submit()'>

问题答案:

Selenium与用户与Web浏览器的交互方式类似。因此,如果您尝试与之交互的html元素不可见,那么最简单的解释是,当您编写硒代码时,您不会像普通用户那样与网页进行交互。

最后,这与网页的html无关,与DOM和元素的hidden属性无关。我建议您下载Firebug或其他一些html查看器程序,然后突出显示要按下的按钮。对html查看器使用DOM查找,并手动完成登录过程。注意您必须要做的是使元素可见以便与之交互,然后模仿硒代码中的相同步骤。

如果您确实做了所有必要的事情,但是硒与网页的交互速度比javascript使元素可见的速度快,那么您就需要进行编程了。

天真的方法:

import time
time.sleep(1) # this is done in seconds

更具扩展性的方式:

import time

welcome_button = browser.find_element_by_class_name('welcomeLoginButton')

wait_for_element_visibility(welcome_button).click()

def wait_for_element_visibility(element):
   if element.is_visible():
      return element
   else:
      for i in range(10):
         if not element.is_visible():
            time.sleep(.5)
         else:
            return element


 类似资料:
  • 我正在使用selenium打开并登录google帐户,这是我的第一步。我已成功打开并填写了电子邮件回复,但在提交后,我收到了以下错误 “此浏览器或应用程序可能不安全。了解更多尝试使用不同的浏览器。如果您已经在使用受支持的浏览器,您可以刷新屏幕并重试登录。”来自谷歌。 有什么办法可以绕过这个问题吗?下面是我的代码。

  • 我正试着从下面的网站刮取一些信息。我是新来的,所以不完全了解正在发生的事情。我基本上是从我在互联网上找到的各种例子中获取信息,我正在使用selenium和python来帮助我导航到页面,从那里我可以刮取一些信息,我使用了下面的脚本,我可以导航到主页,关闭cookies并点击登录。此时,将弹出一个用于输入用户id和密码的弹出窗口div元素未被识别,每次我得到的错误是不存在这样的元素时,我添加了具有预

  • 我最近问了一个问题(这里引用:Python Web Scring(Beautiful Soup、Selenium和PhantomJS):只刮整页的一部分),这有助于确定我在滚动时动态更新的页面上刮所有内容时遇到的问题。然而,我仍然无法使用selenium来使用代码指向正确的元素,并迭代地向下滚动页面。我还发现,当我手动向下滚动页面时,有一些原始内容在页面加载时消失,而新内容则更新。例如,看下面的图

  • 我想用selenium登录这个网页。我尝试了selenium的find_element_by_,并使用浏览器中的检查元素。但是我无法登录。我在搜索id、名称、类名,这样我就可以用send_keys传递数据,但是没有做到这些。有人能帮助我提供一些代码来将数据推送到所需的字段吗?谢谢。这就是我到目前为止所做的。 在此之后,我试图点击按钮登录使用 但它失败了。它给出了无法找到“登录”的错误。由于默认情况

  • 问题内容: 我想要做的是打开一个页面(例如youtube)并自动登录,就像我在浏览器中手动打开它一样。 据我了解,我必须使用cookie,问题是我不知道如何使用。 我尝试使用以下方法下载YouTube Cookie: 我得到的是: {'name':'VISITOR_INFO1_LIVE','value':'EDkAwwhbDKQ','path':'/','domain':'.youtube.com

  • 我对Selenium是新手,我正在尝试使用Chrome在这个网页上自动完成登录任务。我已经成功地找到并发送了电子邮件和密码字段的密钥。但是,我无法单击“登录”按钮。 检查元素产生以下结果, 我试过使用 由于没有名称字段,因此产生了一个错误。我发现这可以使用XPath或css选择器来完成。 请告知