2017-07-08 4 views
2

私はセレンでウェブサイトにログインしようとしています。これは私が作ったコードです。Seleniumでは、Webサイトにログイン中にInvalidSelectorExceptionを処理する方法

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("https://abcde.com") 

assert "xxx" in driver.title 
user = driver.find_element_by_css_selector("#ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox") 
user.clear() 
user.send_keys("username") 

pwd = driver.find_element_by_css_selector("#ctl00$MasterHeaderPlaceHolder$ctl00$passwordTextbox") 
pwd.clear() 
pwd.send_keys("mypassword") 
pwd.send_keys(Keys.RETURN) 
assert "No results found." not in driver.page_source 
driver.close() 

私はこのコードを実行すると、InvalidSelectorExceptionが発生しました。

上げexception_class(メッセージ、画面、スタックトレース) selenium.common.exceptions.InvalidSelectorException:メッセージ:無効セレクタ: (ドライバ:無効または違法セレクタが (クロム= 59.0.3071.115セッション情報)が指定されました情報:chromedriver = 2.30.477691(6ee44a7247c639c0703f291d320bdf05c1531b57)、プラットフォーム=のLinux 4.4.0-83-ジェネリックx86_64版)

私はあなたの便宜のためにPNGファイルを添付しました。 enter image description here これはウェブサイトのページソースです。

<input name="ctl00$MasterHeaderPlaceHolder$ctl00$userNameTextbox" type="text" value="Username" id="ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox" OnClick="UsernameBehaviour(&quot;click&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" OnFocus="UsernameBehaviour(&quot;focus&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" OnBlur="UsernameBehaviour(&quot;blur&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_userNameTextbox&quot;, &quot;Username&quot;);" />    
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$passwordTextbox" type="password" id="ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox" OnBlur="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 1);" style="display:none" /> 
<input name="ctl00$MasterHeaderPlaceHolder$ctl00$tempPasswordTextbox" type="text" value="Password" id="ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox" OnClick="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 2);" OnFocus="PasswordBehaviour(&quot;ctl00_MasterHeaderPlaceHolder_ctl00_passwordTextbox&quot;, &quot;ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox&quot;, 2);" /> 

私は便宜上、pngファイルを添付しています。 enter image description here

ご覧のとおり、2つの入力ボックスに関連するパスワードがあります。パスワード入力タグをクリックすると、JavaScriptが何かをするようです。確信はないけど。

私はその理由と解決策を知りたいと思います。

お時間をいただきありがとうございます。

私を助けてください。

答えて

2

CSSセレクタを間違って使用しています。要素に結びついている必要がありますが、属性値を使用して検索しようとしています。

これを動作させるには、CSSセレクタをこれに変更する必要があります。

ソリューション1.

driver.find_element_by_css_selector("input[id='ctl00_MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox']") 

ソリューション2

要素は、name属性を持っているとして、あなたは "find_element_by_name" を使用することができます。

driver.find_element_by_name("ctl00$MasterHeaderPlaceHolder$ctl00$tempPasswordTextbox") 
+0

こんにちは、マディス。お返事をありがとうございます。申し訳ありませんが、ユーザー名の入力ボックスがうまくいきます。パスワード入力ボックスのためにエラーが発生しました。私はこれについて知りたいです。 –

+0

@YuiryKozlenko Hmm。次に、パスワードフィールドが「隠されている」という問題になる可能性があります。スタイル= "表示:なし"。これにより問題が発生する可能性があります。正しい入力フィールドに切り替えます。 pwd = driver.find_element_by_css_selector( " ctl00 $ MasterHeaderPlaceHolder $ ctl00 $ tempPasswordTextbox") –

+0

これを解決する方法はありますか? –

関連する問題