1

Googleのサインインボックスのユーザー名とパスワードのフィールドにキーを送信する際に問題が発生しました。Seleniumは、IDが「Email」と「Passwd」のWeb要素を見つけましたが、キーを送信できません。

期待した結果が得られないコードは次のとおりです。

from selenium               import webdriver
#from selenium.webdriver.common.keys import Keys
import time

username = "test"
password = "ninja"


driver = webdriver.Firefox()
driver.get(u'http://www.google.com')

driver.implicitly_wait(10)

elem = driver.find_element_by_id("gb_70")
elem.click()

username = driver.find_element_by_id('Email')
username.send_keys(username)

このコードはエラーを生成します:

トレースバック(最後の最後の呼び出し):ファイル "SERPkopi.py"、行18、username.send_keys(username)ファイル "/Users/Sverdrup/virtualenv-1.6.1/Alert/lib/python2.7/site-packages/ selenium / webdriver / remote / webelement.py "、142行目、send_keys local_file = LocalFileDetector.is_local_file(* value)File" /xxxxx/xxxxxx/virtualenv-1.6.1/Alert/lib/python2.7/site-packages/ selenium / webdriver / remote / webelement.py "、253行目、is_local_file for i in range(len(val)):TypeError:タイプ'WebElement'のオブジェクトにlen()がありません

同じコードがグーグルの「q」(クエリ)フィールドに書き込むことができるので、これは奇妙です

id、name、xpathでwebElementを識別しようとしましたが、役に立ちませんでした。

理由の背景:

今日はグーグルアラートに目を向けて、会社の顧客の名前でアラートを設定したいと思っています(これは企業間取引であるため、顧客は会社そのものです)。顧客は比較的少なく、名前について多くのアラートが届くとは思いませんが、追跡できるといいですね。

グーグルアラート用のAPIがないことを見て、私はセレンを使用してプログラムで数百の顧客名を入力すると思いました。私は最初に自分のアカウントにログオンできる必要があります...

私は本当にすべてのそして与えられたどんな助けにも感謝します。

心から

4

1 に答える 1

9

したがって、これはほろ苦い答えかもしれませんが、スクリプトは基本的に問題ありません。ここに問題があります:

username = "test"

#....

username = driver.find_element_by_id('Email')
username.send_keys(username)

ユーザー名を適切に設定しましたが、Email次にそれを要素として再定義します。これにより、最終行が原因でエラーが発生します。要素を文字列(の引数)usernameとしてそれ自体に送り返し、send_keys混沌の始まりのような出来事。lenエラーは、Seleniumが引数の長さをとろうとしているためです。send_keysこれは文字列であると想定されていますが、この場合は要素です。これを修正するには、変数名の1つを変更するだけです。例えば

user_field = driver.find_element_by_id('Email')
user_field.send_keys(username)
于 2012-10-31T18:42:33.680 に答える