2016-05-01 12 views
0

私はSeleniumを使用して(利用規約に従って)データをスクラップしていますが、まずログインする必要があります。私は、次のコードを持っている、と名前がFirefoxで検査要素から得た:Seleniumを使用してQuoraにログインすることができません

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("https://www.quora.com/") 
elem=""; 
try: 
    elem = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.NAME, "email")) 
    ) 
finally: 
    driver.quit() 
elem.send_keys("email") 
try: 
    elem = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.NAME, "password")) 
    ) 
finally: 
    driver.quit() 
elem.send_keys("password") 
elem.send_keys(Keys.ENTER) 

しかし、セレンは私に言って続けて:

socket.error: [Errno 10061] No connection could be made because the target machine actively refused it 

これはなぜですか?

答えて

1

Webスクレイピングブラウザセッションの途中でquit()に電話をかけてはいけません。基本的にブラウザを閉じてから、コマンドを送信し続けると、ソケットエラーが発生します。代わり

try/finally下にすべてのコードを配置:

try: 
    elem = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.NAME, "email")) 
    ) 
    elem.send_keys("email") 

    elem = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.NAME, "password")) 
    ) 
    elem.send_keys("password") 
    elem.send_keys(Keys.ENTER) 
finally: 
    driver.quit() 

selenium.common.exceptions.ElementNotVisibleException:メッセージ:要素が現在表示されていないので、

と相互作用しなくてもよいが

この問題は、name="email"name="password"という複数の要素が存在するためですページ上にあなたは目に見えないものを見つけて、それと対話しようとしています。あなたのロケータを改善し、より具体的にする必要があります。

elem = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".regular_login [name=email]")) 
) 
elem.send_keys("email") 

elem = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".regular_login [name=password]")) 
) 

elem.send_keys("password") 
elem.send_keys(Keys.ENTER) 
+0

私はこのselenium.common.exceptions.ElementNotVisibleExceptionを得続ける:メッセージ:要素が現在表示されていないので、と相互作用することはできません、任意のアイデア? – user2578666

+0

@ user2578666大丈夫です、それは別の問題ですが、私は見てみましょう。 – alecxe

+0

@ user2578666初期の質問を変更しないでください。これは答えを非関連にします。編集を元に戻してください。 – alecxe

関連する問題