2016-10-22 9 views
0

私はセレンコースをオンラインで受けており、ログインを自動化しています。講義は時代遅れで、使用しているウェブサイトは更新されています(Quora)。クラス名が変更されたdivを探す(セレン)

問題は、入力フィールドは役に立たない "find_element_by_id方法を作るランダムに生成されたクラス名を持っている、である。

私は別のセッションにログインする方法を見つけ出すことはできません。私はどのように選択することになります(別のクラス名を持つ)異なるセッション中にこれらのフィールドは。これは私のコードは次のようになります。事前にありがとうございます。私はコースの講師を依頼しようとしたが、彼はすべての週答えたhasnt。

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.keys import Keys 


driver = webdriver.Chrome(executable_path = r'/Users/mpbro17/Desktop/chromedriver') 

driver.get('https://www.quora.com') 

driver.find_element_by_id("__w2_fy0VXDC_email").clear() 
driver.find_element_by_id("__w2_fy0VXDC_email").send_keys("[email protected]") 
driver.find_element_by_id("__w2_fy0VXDC_password").clear() 
driver.find_element_by_id("__w2_fy0VXDC_password").send_keys("testpassword1") 
driver.find_element_by_id("__w2_fy0VXDC_submit_button").click() 

代わりにERROR

Traceback (most recent call last): 
    File "/Users/mbpro/Desktop/projects/scraping_course/test_quora_login.py", line 13, in <module> 
    driver.find_element_by_name("email").clear() 
    File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 92, in clear 
    self._execute(Command.CLEAR_ELEMENT) 
    File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 494, in _execute 
    return self._parent.execute(command, params) 
    File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element is not currently interactable and may not be manipulated 
    (Session info: chrome=53.0.2785.143) 
    (Driver info: chromedriver=2.24.417412 (ac882d3ce7c0d99292439bf3405780058fcca0a6),platform=Mac OS X 10.11.5 x86_64) 

答えて

0

するTry CSSセレクタ:

driver.find_element_by_css_selector('[id$="email"]') 
driver.find_element_by_css_selector('[id$="password"]') 
driver.find_element_by_css_selector('[id$="submit_button"]') 
+0

で行きます.exceptions.InvalidElementStateException:メッセージ:無効な要素の状態:要素をクリアするには、ユーザーが編集可能である必要があります。 – tafra

0

あなたはログインボタンのためにあなたの要素(メールアドレスとパスワード)とcssSelectorを見つけるために、find_element_by_nameメソッドを使用することもできました。私はこれがあなたを落胆させることはないと思います。

driver.find_element_by_name("email").clear() 
driver.find_element_by_name("email").send_keys("[email protected]") 
driver.find_element_by_name("password").clear() 
driver.find_element_by_name("password").send_keys("testpassword1") 
driver.find_element_by_css_selector("input[value='Login']").click() 
+0

私はクラス名とこれを試しました..私はエラーが発生し続けます。私は質問に貼り付けた – tafra

+0

私はクラス名について話していませんでした。あなたが作業しているタグの中には「名前」という属性があります。これは、セレンでロケータを見つけるためのアプローチの1つです。 –

+0

私は知っている。私は他に何を試みたかを知らせているだけだ。名前で要素を検索しても、質問にエラーが表示されました。あなたは見ましたか? – tafra

0

標準と同じ名前にする必要があります。名前のプロパティでは、2つの要素があります。

enter image description here

だから私はこれを試してみましたが、それでもcheck_response レイズexception_class(メッセージ、画面、スタックトレース) selenium.commonで、erorr「ライン192を取得しています以下のxpath

//div[@class='regular_login']//input[@name='email'] 
//div[@class='regular_login']//input[@name='password'] 
//div[@class='regular_login']//input[contains(@class,'submit')] 
+0

hmm、決して使用されていないfind_element_by_xpath()どのように見えますか?多くの試みの後に。私はそれを理解しているようだ – tafra

関連する問題