![](/img/trans.png)
[英]ERR_TOO_MANY_REDIRECTS error while trying to login through a webpage that uses frames and Javascript using Selenium and Python
[英]Error trying to login to webpage using selenium with python
我收到一個元素不可見的錯誤:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.