9

Windows 7でPython(https://pypi.python.org/pypi/selenium)でセレンパッケージを使用しています。Facebookアカウントにログインしようとすると、次のsend_keysコマンドを使用します。

elem = browser.find_element_by_name("email")
elem.send_keys(email);
elem = browser.find_element_by_name("pass")
elem.send_keys(password);

2番目がパスワードの最初の文字を削除するため、ログインは明らかに失敗send_keysします(パスワード文字を電子メールフィールドに直接送信することでこれを見つけました.

どうしたの?入力フィールドにキーを送信するような単純なことをセレンができないのはなぜですか? これは、自動スクリプトを拒否するために Facebook によってコード化された何らかの保護手段ですか?

アルファベット全体を送信しようとしたところ、次のようになりました。

abcdefghijklmnopqrstuvwxyzBCDFGIKLNOQSTWX

何文字抜けてるか気になる…

アップデート

どうやら、この問題は facebook とは何の関係もなく、chrome ドライバーに関係しているようです。

次の簡単なコードを送信すると

browser = webdriver.Chrome()
browser.get("https://www.google.com") # Load page
elem = browser.find_element_by_name("q") # Find the query box
query= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
elem.send_keys(query)

Chrome ドライバーでは BCDFGIKLNOQSTWX を取得します A、E、H ... Y、Z が欠落していることに注意してください firefox ドライバーでは (browser = webdriver.Chrome()次のように置き換えbrowser = webdriver.Firefox()ます

4

4 に答える 4

0

Chrome Webdriver にいくつかのバグがある (あった) ようです: https://code.google.com/p/chromedriver/issues/detail?id=435

問題の核心は、キーボードが英語以外の言語用に構成されている場合、または webdriver プロセスとクロム ディスプレイが異なる言語/環境で実行されている場合 (たとえば、あるホストから別など)

于 2015-02-13T18:58:04.817 に答える
-1

Selenium Ide を使用し、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
import unittest, time, re

class Test1(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://www.facebook.com/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_1(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_id("email").clear()
        driver.find_element_by_id("email").send_keys("username")
        driver.find_element_by_id("pass").clear()
        driver.find_element_by_id("pass").send_keys("password")
        driver.find_element_by_id("u_0_b").click()
        driver.find_element_by_xpath("//div[@id='u_ps_0_1_5']/div/div").click()
        driver.find_element_by_link_text("1 Requests").click()
        driver.find_element_by_id("globalContainer").click()

    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException, e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()
于 2013-08-02T10:08:19.657 に答える