13

残りのスクリプトを実行する前に、さまざまな時点でログインが必要なスクリプトを 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()
4

2 に答える 2

19

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 秒後に Falsey 値を返し続ける場合は a を返します。

Selenium bookWebDriverWaitでもう少し詳しい情報を見つけることができます。

于 2013-06-04T21:11:14.290 に答える
5
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()します (パスワードを受け入れ、画面を見ているすべての人に表示しないためです)。

何が起こるかというと、ページが読み込まれます。その後、すべてが停止し、ユーザーが手動でログインしてから、python CLI に戻り、Enter キーを押します。

于 2013-06-04T21:56:41.607 に答える