2013-06-04 6 views
6

मैं सेलेनियम/पायथन में एक स्क्रिप्ट चलाने की कोशिश कर रहा हूं जिसके लिए बाकी स्क्रिप्ट चलाने से पहले लॉग इन की आवश्यकता होती है। क्या स्क्रिप्ट को रोकने और उपयोगकर्ता के लिए मैन्युअल रूप से उपयोगकर्ता नाम और पासवर्ड दर्ज करने के लिए स्क्रिप्ट को बताने के लिए कोई तरीका है (हो सकता है कि स्क्रिप्ट जारी रखने से पहले पृष्ठ शीर्षक के लिए कुछ ऐसा इंतजार हो)।मैं सेलेनियम/पायथन को कैसे जारी रखने से पहले उपयोगकर्ता लॉगिन करने के लिए इंतजार कर सकता हूं?

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:

यह मेरा कोड अब तक है। उदाहरण के लिए, यह एक Google खोज करता है और फिर इंतजार कर रहा है एक निश्चित तत्व परिणाम मुद्रण से पहले उपस्थित होने के लिए:

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 या तो लैम्ब्डा समारोह का परिणाम वापस आ जाएगी, या एक selenium.common.exceptions.TimeoutException लैम्ब्डा समारोह के लिए जारी करता है, तो 10 सेकंड के बाद एक फाल्सी मान वापस करें।

Selenium book में WebDriverWait पर आप थोड़ी अधिक जानकारी पा सकते हैं।

+0

मैं अभी भी यह पता नहीं लगा सकता कि इस काम को लॉगिन पेज पर कैसे बनाया जाए। उदाहरण के लिए, चलिए एक उदाहरण के रूप में फेसबुक का उपयोग करते हैं। सेलेनियम में फेसबुक लोड करते समय, इसे उपयोगकर्ताओं को लॉग इन करने की आवश्यकता होती है। मैं चाहता हूं कि यह फेसबुक खोलें, उपयोगकर्ता को मैन्युअल रूप से लॉग इन करने का इंतजार करें, और उसके बाद यह पता चल जाए कि उपयोगकर्ता अगले पृष्ठ पर पहुंच गया है, तो स्क्रिप्ट को जारी रखना जारी रखें। – JStew

+1

मैन्युअल रूप से फेसबुक पर लॉग इन करें। फिर लॉगिन के बाद एचटीएमएल को बचाओ। उस पृष्ठ पर कुछ तत्व ढूंढें जो एक सिग्नल के रूप में कार्य कर सकता है जिसे पृष्ठ लोड किया गया है। फिर उस तत्व को खोजने के लिए '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() की तरह काम करता है, यह छोड़कर does not कोई characthers (दिखाने के अपने को स्वीकार करने के लिए पासवर्ड और notshowing यह स्क्रीन पर देखे जाने वाले सभी को)

तो आपका पृष्ठ लोड होने पर क्या होता है। तो सबकुछ बंद हो जाता है, आपका उपयोगकर्ता मैन्युअल रूप से लॉग इन करता है, और फिर पाइथन सीएलआई पर वापस जाता है और एंटर दबाता है।

+0

मैंने इसे करने की कोशिश की, लेकिन इसे काम नहीं कर सका। मैंने जोड़ा है कोड जो मैं अपनी समस्या के विवरण में उपयोग कर रहा हूं। – JStew

+0

'आयात गेटपास' और 'getpass.getpass (" एंटर दबाएं ") महत्वपूर्ण भाग हैं, मैंने छद्म माफी का उपयोग किया, बीमार मेरे उत्तर को और अधिक 'यथार्थवादी' – TehTris

+0

होने के लिए संपादित करें यह अभी भी काम नहीं कर रहा है। मुझे यकीन है कि मैं कहीं छोटी गलती कर रहा हूं। मैंने अपने मूल प्रश्न को मेरे कोड के साथ संपादित किया। – JStew

संबंधित मुद्दे

 संबंधित मुद्दे