2013-06-04 17 views
6

Selenium/Python'da, komut dosyasının geri kalanı çalıştırılmadan önce farklı noktalarda oturum açma gerektiren bir komut dosyası çalıştırmaya çalışıyorum. Kullanıcının kullanıcı adı ve şifreyi manuel olarak girmesi için giriş ekranını duraklatmasını beklemek ve beklemek için herhangi bir yol var mı (belki de betiğin devam etmesinden önce sayfa başlığının değişmesini bekleyecek bir şey).Selenium/Python'u, çalışmaya devam etmeden önce kullanıcının giriş yapmasını nasıl bekleyebilirim?

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() 

cevap

9

Kullanım WebDriverWait:

Bu benim defa kodudur. Örneğin, bu bir hakkında arama yapar ve daha sonra belli bir eleman sonucu baskı öncesinde mevcut olması bekler:

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 fonksiyonun sonucunu döndürür ya veya bir lambda fonksiyonu devam selenium.common.exceptions.TimeoutException halinde 10 saniye sonra Falsey değerini döndürür.

Selenium book numaralı telefondan WebDriverWait hakkında daha fazla bilgi bulabilirsiniz. Komut dosyasını çalıştırmak istediğinizde

+0

Hala bir giriş sayfasında bu işin nasıl yapılacağını anlayamıyorum. Örneğin, facebook'u örnek olarak kullanalım. Selenium'da facebook yüklerken, kullanıcıların giriş yapmasını gerektirir. Facebook'u açmayı, kullanıcının manuel olarak giriş yapmasını beklemeyi ve sonra kullanıcının bir sonraki sayfaya ulaştığını algıladığında betiği çalıştırmaya devam etmesini istiyorum. – JStew

+1

Manüel olarak facebook'a giriş yapın. Sonra giriş yaptıktan sonra HTML'yi kaydedin. Bu sayfada yüklenen sayfanın bir sinyali olarak hareket edebilecek bazı öğelere bakın. Daha sonra bu elemanı bulmak için bir 'driver.find_elements_by _ * (...)' a yönlendirin. Bunu 'wait.until (...) 'komutunda kullanın. – unutbu

+0

Özgün sorumu şu ana kadar kullandığım kodla düzenledim. Daha büyük bir otomasyon aracı oluşturmak için kendim için bir öğrenme aracı olarak kullanıyorum. Wait.until işlevini kullanırken, hatayı aldım: "global name" wait "tanımlanmadı. – 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 

SONRA, sen loginUser() yazıp onun şeyi yapar

bunun dışında tam input() gibi getpass.getpass() eserler (herhangi bir characthers göstermek doesnt çünkü bu işler

onun kabul şifreler ve notshowing için ekrana bakarak herkese)

Peki, ne oluyor sayfanız yüklenir. sonra her şey durur, Kullanıcınız manuel olarak giriş yapar ve sonra python CLI'ye geri döner ve isabetler girer.

+0

Bunu denedim ama işe yaramayacaktım. Ekledim benim sorunumun açıklamasına kullandığım kod. – JStew

+0

'import getpass 've' getpass.getpass ("enter'a bas") '' '' '' '' '' '' '',' 'yanlış' kullandım önemli parçalarım, daha 'gerçekçi' olmak için cevabımı düzeltmek ' – TehTris

+0

Hala çalışmıyor. Eminim bir yerlerde küçük bir hata yapıyorum. Orijinal sorumu kodumla düzenledim. – JStew

İlgili konular