2013-06-04 64 views
6

我試圖在Selenium/Python中運行一個腳本,它需要在腳本的其餘部分可以運行之前在不同的點登錄。是否有任何方法讓我告訴腳本暫停並在登錄屏幕上等待用戶手動輸入用戶名和密碼(也許是在繼續腳本之前等待頁標題更改的內容)。如何讓Selenium/Python在繼續運行之前等待用戶登錄?

這是我到目前爲止的代碼:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 
import unittest, time, re, getpass 

driver = webdriver.Firefox() 
driver.get("https://www.facebook.com/") 

someVariable = getpass.getpass("Press Enter after You are done logging in") 

driver.find_element_by_xpath('//*[@id="profile_pic_welcome_688052538"]').click() 

回答

9

使用WebDriverWait。例如,該執行谷歌搜索,然後等待一特定元素到打印結果之前存在:

import contextlib 
import selenium.webdriver as webdriver 
import selenium.webdriver.support.ui as ui 
with contextlib.closing(webdriver.Firefox()) as driver: 
    driver.get('http://www.google.com') 
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds 
    inputElement = driver.find_element_by_name('q') 
    inputElement.send_keys('python') 
    inputElement.submit() 
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g')) 
    for result in results: 
     print(result.text) 
     print('-'*80) 

wait.until或者返回lambda函數的結果,或selenium.common.exceptions.TimeoutException如果拉姆達功能繼續10秒後返回Falsey值。

你可以找到在Selenium bookWebDriverWait多一點信息。

+0

我仍然無法弄清楚如何使一個登錄頁面,這方面的工作。例如,讓我們用facebook作爲例子。當在Selenium中加載Facebook時,它需要用戶登錄。我希望它打開Facebook,等待用戶手動登錄,然後在檢測到用戶已到達下一頁時繼續運行腳本。 – JStew

+1

手動登錄Facebook。然後在登錄後保存HTML。在頁面上尋找一些可以充當頁面加載信號的元素。然後設計一個'driver.find_elements_by _ *(...)'來找到該元素。在'wait.until(...)'命令中使用它。 – unutbu

+0

我用迄今爲止的代碼編輯了我的原始問題。我將它作爲自己的學習工具來構建更大的自動化工具。當使用wait.until功能,我收到了錯誤:「全球名‘等待’沒有定義 – JStew

3
from selenium import webdriver 
import getpass # < -- IMPORT THIS 

def loginUser(): 
    # Open your browser, and point it to the login page 
    someVariable = getpass.getpass("Press Enter after You are done logging in") #< THIS IS THE SECOND PART 
    #Here is where you put the rest of the code you want to execute 

那麼無論什麼時候你要運行腳本,你鍵入loginUser()並就執行

這個工作,因爲getpass.getpass()作品酷似input(),但它不顯示任何characthers(其接受的密碼和notshowing它給大家看屏幕)

所以會發生什麼是你的頁面加載。然後一切都會停止,您的用戶手動登錄,然後返回到Python CLI並點擊輸入。

+0

我試過這個,但不能得到它的工作。我已經添加了 我用於描述我的問題的代碼。 – JStew

+0

'import getpass'和'getpass.getpass(「press enter」)'是重要的組成部分,我用僞造的抱歉,虐待編輯我的答案是更加'現實' – TehTris

+0

它仍然無法正常工作。我確信我在某個地方犯了一個小錯誤。我用我的代碼編輯了我原來的問題。 – JStew

相關問題